Як отримати та змінити вихідний код пакунків, встановлених через apt-get?


163

Я припускаю, що всі застосовані програми apt-getє відкритим кодом; але для тих, які доступні таким чином, де я можу отримати вихідний код для цих програм, а також оновити їх?

У мене є кілька додатків, які я регулярно використовую, які вже активно не розробляються, і я хотів би додати функції. Куди мені звернутися, щоб отримати права на оновлення цих програм?

У цьому випадку я конкретно маю на увазі пакет hellanzb


7
apt-getтакож підтримує програми із закритим кодом, тому ваше початкове припущення є невірним.
Flimm

Відповіді:


183

Використовуйте команду apt-get source <package>(не використовуйте sudo з нею) для завантаження джерела пакету.

Від man apt-get:

   source
       source causes apt-get to fetch source packages. APT will examine the
       available packages to decide which source package to fetch. It will then
       find and download into the current directory the newest available version of
       that source package while respect the default release, set with the option
       APT::Default-Release, the -t option or per package with the pkg/release
       syntax, if possible.

       Source packages are tracked separately from binary packages via deb-src type
       lines in the sources.list(5) file. This means that you will need to add such
       a line for each repository you want to get sources from. If you don't do
       this you will properly get another (newer, older or none) source version
       than the one you have installed or could install.

       If the --compile option is specified then the package will be compiled to a
       binary .deb using dpkg-buildpackage, if --download-only is specified then
       the source package will not be unpacked.

       A specific source version can be retrieved by postfixing the source name
       with an equals and then the version to fetch, similar to the mechanism used
       for the package files. This enables exact matching of the source package
       name and version, implicitly enabling the APT::Get::Only-Source option.

       Note that source packages are not tracked like binary packages, they exist
       only in the current directory and are similar to downloading source tar
       balls.

Щоб створити пакет з джерела, спочатку встановіть залежності збірки:

sudo apt-get build-dep <package>  

Потім використовуйте dpkg-buildpackageдля створення .debфайлу. З короткого довідкового листа APT та Dpkg :

dpkg-buildpackage Створює пакет Debian з вихідного дерева Debian. Ви повинні бути в головному каталозі дерева джерел, щоб це працювало. Використання зразка:

 dpkg-buildpackage -rfakeroot -uc -b

Там, де -rfakerootвказується використовувати програму fakeroot для імітації привілеїв root (для цілей власності), -ucрозшифровується "Не криптографічно підписуйте журнал змін" і -bрозшифровується як "Створення тільки бінарного пакета"

У терміналі, cdв каталог, що містить джерело пакету (наприклад ~/code/hellanzb-0.13), запустіть таку команду:

dpkg-buildpackage -rfakeroot -uc -b

Якщо збірка буде успішною, .debу батьківському
каталозі буде розміщений файл (наприклад ~/code/hellanzb_0.13-6.1_all.deb).


як я можу встановити з модифікованого джерела. а також взяти на себе його назад для інших користувачів. Дякую!
myusuf3

1
@dustyprogrammer Оновили свою відповідь інструкціями щодо створення .debпакету з вихідного коду. Щодо отримання вашого зміненого пакету у сховищах, вам слід поговорити з MOTU про це.
Ісая

@DoR Чи є спосіб створити деб, який встановлюється за замовчуванням у спеціальній директорії? так само, як ми можемо встановити, використовуючи --prefix під час налаштування? насправді я не можу знайти tarballs для джерела бібліотеки, ось чому я не можу налаштувати --prefix і змусити його встановити .. але це джерело пакунків доступно через apt, тому я думав встановити вихідний пакет у потрібний префікс .
ashishsony

2
Якщо ви не хочете використовувати джерело apt-get (наприклад, при складанні пакету, взятого з іншого дистрибутива), завантажте 3 вихідні файли та використовуйте 'dpkg-source -x [fine] .dsc' для вилучення файлів та застосуйте відрізняється перед dpkg-buildpackage. ( ftp.debian.org/debian/doc/source-unpack.txt )
Шломі Лубатон

Чи sudo apt-get build-dep <package>встановлює залежність як двійкові файли? Якщо так, це не повна збірка з джерела. Як можна зробити встановлення залежностей встановлення залежно від джерела?
Hello World

21

Загалом, ви можете отримати джерело встановленого пакету, дотримуючись цієї процедури:

  1. Увімкнути вихідні сховища. Відкрийте приладну панель (у верхній лівій кнопці) та шукайте sources. Це повинно відобразити Software & Updatesпрограму, запустити її та переконайтесь, що вибрано параметр "Вихідний код":

    введіть тут опис зображення

  2. Відкрийте термінал і запустіть цю команду:

    apt-get source vlc
    

Це завантажить джерела vlc у ваш поточний каталог, і ви зможете переглянути їх у своє дозвілля.

Звичайно, у випадку з цим vlcви можете також завантажити їх безпосередньо з веб-сайту videolan.org: https://www.videolan.org/vlc/download-sources.html


1
Вам не потрібно використовувати судо з "apt-get source"
Squidly

@MrBones argh! Ні, звичайно, ні, сила звички. Дякуємо, що вказали на це.
тердон

в терміналі: software-properties-gtk <---, що запустить панель GUI "Програмне забезпечення та оновлення". (Він з якихось причин не з'явився в пошуку на панелі приладів.)
пестофаг

17

Ви можете використовувати apt-get source --compileбезпосередньо:

sudo apt-get build-dep <package>
sudo apt-get source --compile <package>

Працювали для мене. .Deb завершується в каталозі, з якого ви запустили команду.


9
Працював і для мене, дякую. Ще одна додаткова деталь: ви можете встановити .deb за допомогоюsudo dpkg -i <package>.deb
waldyrious

Краще рішення за винятком того, що apt повернеться до версії сховища, оскільки ви забули документувати журнал змін "dch -i".
Футаль

3

Щоб отримати більше інформації про пакет, включаючи вихідну URL-адресу та контакти проекту / програми, ви можете ознайомитись з файлом авторських прав (з посиланням на пакунки.debian.org ).

Коли пакет включений і встановлений у вашій системі, ви також можете прочитати файл авторських прав безпосередньо на /usr/share/doc/$package_or_program_name/copyright.

Подивіться, як завантажити вихідний код пакета Debian? .


2

Мінімальний приклад з helloпакетом

Все це та багато іншого описано на веб- сайті: https://www.debian.org/doc/manuals/maint-guide/build.en.html

Спочатку давайте отримаємо зразок пакета для зміни джерела для:

sudo apt-get install hello
hello

Виходи:

Hello, world!

Тепер давайте зламати це. Отримайте джерело:

apt-get source hello
cd hello-*

і відкрити:

vim src/hello.c

і змінити повідомлення на:

Hello, world hacked!

Потім зробіть те ж саме на тесті, інакше дратівливий тест почне виходити з ладу:

vim tests/greeting-1

Потім відновіть за допомогою:

sudo apt-get install devscripts
sudo apt-get build-dep hello
debuild -b -uc -us

Близько кінця виводу, він говорить:

dpkg-deb: building package 'hello' in '../hello_2.10-1build1_amd64.deb'.

тому він створив .deb у батьківському каталозі, як це зважитися. Отже, нарешті, ми встановлюємо та тестуємо модифікований пакет:

sudo dpkg -i ../hello_2.10-1build1_amd64.deb
hello

і там ви переходите, воно виводить нове повідомлення:

Hello, world hacked!

Тестовано на Ubuntu 18.04.

Стара bzrвідповідь

TODO: це перестав працювати на Ubuntu 16.04 дружніх, в іншому випадку з: bzr: ERROR: Not a branch: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/hello/".. bzr branch lp:ubuntu/wily/helloпрацює і bzr branch lp:ubuntu/xenial/helloвідмовляється знову. Чомусь https://code.launchpad.net/ubuntu/+source/hello не показує Xenial: https://web.archive.org/save/https://code.launchpad.net/ubuntu/+source /Здравствуйте

Як згадувалося на https://askubuntu.com/a/81889/52975, існує також підхід, характерний для Ubuntu bzr.

Отримайте останню версію:

bzr branch lp:ubuntu/hello

Конкретна версія:

bzr branch lp:ubuntu/trusty/hello

Ви також можете використовувати pull-lp-source:

sudo apt-get install ubuntu-dev-tools
pull-lp-source hello

Тоді ви зможете редагувати це:

cd hello
vim some_file

Відновіть його:

dch -i 
debcommit
bzr bd -- -b -us -uc

І встановіть його:

sudo dpkg -i ../hello.deb

Посібник з упаковки Ubuntu є хорошим джерелом інформації.


bzr branch lp:ubuntu/hello bzr: ERROR: Not a branch: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/hello/". bzr branch lp:ubuntu/xenial/lightdm bzr: ERROR: Not a branch: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/xenial/lightdm/". Посібник з упаковки Ubuntu , зокрема 4.2. Отримання джерела каже: bzr branch ubuntu:lightdm lightdm.quickswitch bzr: ERROR: Not a branch: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/lightdm/". Який безлад. :-(
Стефан Гурішон

Використовується pull-lp-sourceзамість цього, але тоді ми не отримуємо сховища bzr. bzr bd -- -b -us -ucкаже bzr: ERROR: Not a branch: "/org/gourichon/localdata/SG/projects/sysadmin/sysadmin_ergozel/2016/2016-08-15/blouarp/lightdm-1.18.3/".: - / Дякую за будь-яку підказку.
Стефан Гурішон

@ StéphaneGourichon hummm, я відтворюю вас на Ubuntu 16.04 Xenial. Додавання конкретної версії працює: bzr lp:ubuntu/wily/helloале чомусь немає xenialверсії? І жодне не показує на: code.launchpad.net/ubuntu/+source/hello Перейдіть на рисунок.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

1
Дякуємо, що подбали про відтворення. Вибір вибраної неправильної картки, значить. Відкрито bugs.launchpad.net/ubuntu/+source/bzr/+bug/1614053 згадавши про цю сторінку.
Стефан Гурішон

1
Більш зручний, ніж деякі інші підходи. І дякую за інші поради щодо інсайдерів :)
nealmcb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.