Как получить и изменить исходный код пакетов, установленных через apt-get?
Я предполагаю, что все приложения установлены через apt-get
являются открытым исходным кодом; но для тех, которые доступны таким образом, где я могу получить исходный код для этих приложений, а также обновить их?
У меня есть пара приложений, которыми я регулярно пользуюсь, которые больше не разрабатываются, и я хотел бы добавить новые функции. Куда мне обратиться, чтобы получить права на обновление этих приложений?
В данном случае конкретно я имею в виду пакет hellanzb
6 ответов
Используйте команду 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 Quick Reference Sheet:
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
).
В общем случае вы можете получить источник установленного пакета, выполнив следующую процедуру:
Включить исходные репозитории. Откройте панель инструментов (верхняя левая кнопка) и найдите
sources
, Это должно воспитатьSoftware & Updates
Запустите программу и убедитесь, что у вас выбрана опция "Исходный код":Откройте терминал и выполните эту команду:
apt-get source vlc
Это загрузит исходники vlc в ваш текущий каталог, и вы сможете просматривать их на досуге.
Конечно, в случае vlc
Вы также можете загрузить их непосредственно с веб-сайта videolan.org: https://www.videolan.org/vlc/download-sources.html
Ты можешь использовать apt-get source --compile
непосредственно:
sudo apt-get build-dep <package>
sudo apt-get source --compile <package>
Работал на меня..Deb попадает в каталог, из которого вы выполнили команду.
Минимальный пример с 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 Xenial, но с ошибкой: 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/hello
Как уже упоминалось на /questions/674396/kak-skachat-izmenit-sobrat-i-ustanovit-ishodnyij-paket-debian/674400#674400 есть также специфичный для 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 - хороший источник информации.
Чтобы получить больше информации о пакете, включая исходный URL-адрес и контакты проекта / программы, вы можете взглянуть на файл авторских прав (ссылка на которого указана на сайте packages.debian.org).
Когда пакет включен и установлен в вашей системе, вы также можете прочитать файл об авторских правах непосредственно на /usr/share/doc/$package_or_program_name/copyright
,
Посмотрите, как загрузить исходный код пакета Debian?,
Если вам нужно более полное представление и доступ к исходному коду различных версий пакета, используйте широко популярный в настоящее времяgit
систему контроля версий, вы можете использоватьgit-ubuntu clone
команда.
Чтобы получитьgit-ubuntu
инструмент, сделайте это один раз:
sudo snap install --edge --classic git-ubuntu
Чтобы получить git-репозиторий всех отслеживаемых версий данного пакета из исходных версий, Debian, предыдущих выпусков и т. д., выполните:
git-ubuntu clone <package>
Это загрузит версионный исходный код в подкаталог локального каталога и покажет вам длинный список git-тегов для различных версий, которые вы затем сможете извлечь, просмотреть, построить, использовать и т. д.
Дополнительную информацию об этом инструменте и о процессе обмена вашими изменениями с сообществом см. в « Руководстве сопровождающего Ubuntu» .
См. также ранее опубликованное Руководство по упаковке Ubuntu на основе bzr . И подумайте о том, чтобы стать членом сообщества разработчиков Ubuntu!