Для прикладу, спробуємо створити дистрибутив текстового редактору AbiWord, який би не потребував встановлення якихось додаткових пакетів. По аналогії з Windows.
Отже, для початку, очистимо кеш менеджера пакетів:
sudo apt-get clean
Тепер нам потрібно взнати, які пакети нам потрібні щоб abiword міг працювати:
apt-cache depends abiword
На жаль, я не зміг знайти як автоматично завантажити необхідні пакети без того щоб не писати для цього скрипт, тому завершу я даний пост тим, що викладу скрипт який робить це автоматично.
Далі робимо так:
sudo apt-get install --reinstall -d -y abiword
І повторюємо дану команду для всіх пакетів, що згадувалися у залежностях. Це муторно робити вручну, тому краще написати скрипт, наприклад на Python.
По завершенню, у каталозі /var/cache/apt/archives можна буде знайти всі завантажені щойно пакети. Зкопіюємо їх у нашу поточну папку:
cp /var/cache/apt/archives/* ./
Тепер запакуємо наші файли в архів:
tar cvvf abiword.tar ./
Таким чином ми отримали архів abiword.tar який містить всі необхідні пакети для встановлення AbiWord. Тепер у каталозі з архівом створимо файл self.ext (gedit self.ext) і напишемо у нього наступне:
mkdir temp
SKIP=`awk '/^__ARCHIVE_FOLLOWS__/ { print NR + 1; exit 0; }' $0`
tail -n +$SKIP $0 | tar xvv -C ./temp
cd temp
sudo dpkg -i *.deb
exit 0
__ARCHIVE_FOLLOWS__
А тепер створюємо безпосередньо архів, що сам розпаковується:
cat self.ext abiword.tar > abiword_install
І даємо йому права на виконання:
chmod +x abiword_install
Власне на цьому все й готово, ми отримали файл розміром 20,6 Мб який містить все необхідне. Тепер, нам достатньо зкопіювати файл abiword_install на будь-який інший комп'ютер з Ubuntu і просто його там запустити. В результаті отримаємо встановлений AbiWord.
Оскільки процедура дійсно не проста, то я викладаю свій щойно написаний скрипт на Python який автоматизує даний процес. Ви можете завантажити його прямо звідси:
deb-packer.tar.gz
Просто розпакуйте даний архів у /usr/bin (або куди захочете) і можете використовувати утиліту. Використовувати її дуже просто:
sudo deb-packer ім'я_програми
По завершенню, у поточному каталозі з'явиться файл *.install який і представлятиме собою готовий скрипт для встановлення програми.
Украинську мову вже запам'ятав практически, так что прокомментирую по-русски.
ВідповістиВидалитиОтличный пост, теперь у меня появился очередной хороший инструмент :-)
Не зовсім згоден з тим, що так отримаєш всі залежності. sudo apt-get build-dep -d -y distrib дотягне лише тільки ті залежні пакети, яких в системі нема. А що робити, якщо вже якісь залежності встановлені перед тим, наприклад з іншим пакетом? Як на мене, то треба дивитися властивості пакету з списком залежностей за допомогою apt-cache, дотягнути тих які бракує через build-dep, і тоді тягнути вручну ті що вже є. Тоді буде повний список з УСІМА залежностями. Справа маруднувата, як на мене.
ВідповістиВидалитиАвтор видалив цей коментар.
ВідповістиВидалитиХм. Добре, я подумаю як удосконалити підхід.
ВідповістиВидалитиІ дійсно, схоже, що я помилявся. Я відредагував статтю і виклав скрипт на пітоні який виконує здається всю необхідну роботу. Реалізував через apt-cache depends, так дійсно правильніше. Буду вдячний якщо хтось спробує потестувати програмку і написати відгук. На перший погляд ніби працює, але все може бути.
ВідповістиВидалитияк на мене, все-таки краще використовувати локальний репозиторій. навіть якщо в ньому буде одна програма. простіше.
ВідповістиВидалитичи я чогось не знаю?
а для перенесення репозиторію на інший комп дуже добре було б, щоби вміст папки /var/cache/apt/archives - залишався, а не зникав. це було б реально корисно.
як таке зробити?
хм... а навіщо перевстановлювати пакети? щоб вони збереглись у кеші? чому б не витягнути потрібні пакунки за допомогою wget? от тільки не знаю, як автоматизувати процес...
ВідповістиВидалити