пʼятниця, 27 червня 2008 р.

Готуємо дистрибутиви програм для офлайнового встановлення

Є одна особливість при встановленні сторонніх програм яка широко відома мабуть лише користувачам Linux - залежності. Користувачі Windows з подібними речами стикаються набагато рідше. Чому? А тому, що дистрибутив програми для Windows зазвичай містить у собі всі необхідні бібліотеки. Таким чином достатньо просто запустити setup.exe і програма встановиться. У Linux же звичайною справою є ситуація коли для того щоб встановити якийсь пакет, потрібно спочатку довстановити ще певні пакети без яких програма працювати не буде. Такий підхід, а також практика динамічної лінковки історично склалися у середовищі Linux. Якщо ви маєте швидкісний Інтернет, то це не проблема, менеджер пакетів сам розв'язує такі проблеми, сам завантажує і встановлює програми. Але як же бути коли доступу до Інтернету нема? Наприклад ваш друг попросив принести йому якусь програму, бо у нього або немає Інтернету або він занадто дорогий. У Windows все було зрозуміло - просто копіюємо дистрибутив потрібної програми на CD або флешку, йдемо до іншого комп'ютеру і просто запускаємо там інсталяцію. А як бути в такий ситуації з Linux? Власне у даній статті я і розповім, як вирішити цю проблему навчишись створювати дистрибутиви програм які містять в собі всі необхідні пакети.

Для прикладу, спробуємо створити дистрибутив текстового редактору 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 який і представлятиме собою готовий скрипт для встановлення програми.

середа, 25 червня 2008 р.

Встановлюємо компоненти Indy для Lazarus

Lazarus - є досить непоганою кросплатформовою альтернативою Delphi, проте його стандартний набір компонентів не вражає. Якщо вам потрібно працювати з різноманітними мережевими проколами (HTTP, FTP, SMTP, Telnet та ін.), то на виручку прийде бібліотека компонентів Indy. Для Delphi-програміста ця назва повинна бути вдіомою, бібліотека існує ще 1993 року, але тепер ми маємо її версію для FreePascal/Lazarus. Процес встановлення насправді нескладний:

1. Завантажуємо файл http://www.indyproject.org/Sockets/fpc/indy-10.2.0.3.tar.gz
2. Розпаковуємо його
tar xzvf indy-10.2.0.3.tar.gz
3. cd indy-10.2.0.3/fpc
4. chmod +x debian/rules
5. sudo apt-get install fakeroot debhelper
6. Компілюємо модулі і створюємо deb-пакети:
dpkg-buildpackage -rfakeroot -uc
7. cd ..
8. Встановлюємо створені пакети
sudo dpkg -i *.deb
9. Тепер запускаємо Lazarus і обираємо Components->Open package file. Відкриваємо файл indylaz.lpk з підкаталога lazarus. У вікні, що з'явиться тиснемо Install. Тепер Lazarus себе перекомпілює і після повторного запуску на панелі з'являться нові закладки з компонентами.

кулинарные рецепты