Я предполагаю, что все приложения, установленные через apt-get
, имеют открытый исходный код; но для тех, которые доступны таким образом, где я могу получить исходный код для этих приложений, а также обновить их?
У меня есть пара приложений, которыми я регулярно пользуюсь, которые больше не разрабатываются, и я хотел бы добавить новые функции. Куда мне обратиться, чтобы получить права на обновление этих приложений?
В данном случае, в частности, я имею в виду пакет hellanzb
Используйте команду apt-get source <пакет>
(не используйте 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 для имитации привилегий корня (для целей владения),-uc
означает "Не криптографически подписывать журнал изменений", а-b
означает "Собирать только двоичный пакет"
В терминале cd
в директорию, содержащую исходный текст пакета (e. g ~/code/hellanzb-0.13
) и выполните следующую команду:
dpkg-buildpackage -rfakeroot -uc -b
Если сборка прошла успешно, то в родительском каталоге будет расположен файл .deb
.
directory (e.g ~/code/hellanzb_0.13-6.1_all.deb
).
Как правило, вы можете получить исходный код установленного пакета, выполнив следующую процедуру:
Включите исходные репозитории. Откройте панель управления (верхняя левая кнопка) и найдите источники
. Это должно вызвать программу Программное обеспечение и обновления
, запустите ее и убедитесь, что у вас выбрана опция «Исходный код»:
Откройте терминал и выполните эту команду:
apt-get source vlc
Это загрузит исходные коды vlc в ваш текущий каталог, и вы сможете просматривать их на досуге.
Конечно, в случае vlc
вы также можете скачать их прямо с videolan.org веб-сайт: https://www.videolan.org/vlc/download-sources.html
Чтобы получить дополнительную информацию о пакете, включая URL-адрес апстрима и контакты проекта / программы, вы можете посмотреть файл авторских прав (ссылка на packages.debian. org ).
Когда пакет включен и установлен в вашей системе, вы также можете прочитать файл авторских прав непосредственно по адресу / usr / share / doc / $ package_or_program_name / copyright
.
Минимальный пример с пакетом 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!
Tested on Ubuntu 18.04.
Old bzr
answer
TODO: это перестало работать на Xenial Ubuntu 16.04, не сработало с:
dpkg-deb: building package 'hello' in '../hello_2.10-1build1_amd64.deb'.
: bzr: ОШИБКА: не ветка: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/hello/".
. bzr ветка lp:ubuntu/wily/hello
работает и bzr ветка lp:ubuntu/xenial/hello
снова не работает. По какой-то причине https://code.launchpad.net/ubuntu/+source/hello не показывает Xenial: https://web.archive.org/save/https://code.launchpad.net/ubuntu/+source/hello
Как упоминалось в https://askubuntu.com/a/81889/52975, также существует специфический для Ubuntu подход с bzr
.
Получите последнюю версию:
bzr branch lp:ubuntu/hello
Специфическая версия:
bzr branch lp:ubuntu/trusty/hello
Вы также можете использовать pulllp-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 является хорошим источником информации.
Вы можете использовать apt-get источник --compile
напрямую:
sudo apt-get build-dep <package>
sudo apt-get source --compile <package>
Работал у меня. .Deb окажется в каталоге, из которого вы запустили команду.