Самораспаковывающиеся архивы с Makeself

linux

Проп­риетар­ные прог­раммы для Linux неред­ко рас­простра­няют­ся в виде исполня­емых уста­нов­щиков. Таким спо­собом их авто­ры избе­гают необ­ходимос­ти собирать более чем один фор­мат пакета. Прог­раммы на плат­формен­но незави­симых язы­ках вро­де Java так­же могут исполь­зовать один гра­фичес­кий уста­нов­щик на всех ОС — раз­лича­ется спо­соб его запус­ка.

РЕКОМЕНДУЕМ:
Как удалить лишние прошивки Linux

Та­ким спо­собом рас­простра­нялись пакеты с драй­верами NVIDIA, некото­рые игры, зна­читель­ная часть пакетов Sun Microsystems / Oracle (NetBeans, SunStudio и дру­гие). Чаще все­го у них было рас­ширение .<wbr />run, иног­да прос­то .<wbr />sh.

Как пра­вило, такой уста­нов­щик пред­став­ляет собой саморас­паковы­вающий­ся архив. На Windows монолит­ные уста­нов­щики и саморас­паковы­вающиеся архи­вы обыч­но содер­жали дво­ичный код прог­раммы для рас­паков­ки архи­ва. UNIX-подоб­ные ОС всег­да вклю­чают в себя как минимум tar и gzip, как тре­бует стан­дарт POSIX, поэто­му мож­но обой­тись скрип­том на стан­дар­тном же Bourne shell.

Самораспаковывающиеся архивы Makeself

Я дол­го думал, что инс­тру­мен­ты для соз­дания этих уста­нов­щиков тоже проп­риетар­ные. Так бы я и думал, если бы не нат­кнул­ся на сво­бод­ные про­екты с такими же уста­нов­щиками. Соз­дателем этих пакетов ока­зал­ся один и тот же инс­тру­мент с откры­тым исходным кодом — makeself.io.

Makeself пред­став­ляет собой срав­нитель­но неболь­шой скрипт. Как ни стран­но, авто­ры до сих пор его не заб­росили, и в пос­ледних вер­сиях Makeself под­держи­вает сжа­тие с помощью xz и кон­троль­ные сум­мы SHA-256 вмес­то тра­дици­онных gzip и MD5.

Мож­но даже не уста­нав­ливать его, а прос­то ско­пиро­вать фай­лы makeself.<wbr />sh и  makeself-header.<wbr />sh в каталог про­екта. Про­демонс­три­рую на прос­том при­мере. Нам пот­ребу­ется целевой файл (условно test.<wbr />sh) и скрипт уста­нов­ки, который будет выпол­нять­ся пос­ле рас­паков­ки во вре­мен­ный каталог.

Про­цесс уста­нов­ки пол­ностью на совес­ти поль­зовате­ля. Для прос­тоты огра­ничим­ся копиро­вани­ем в  /<wbr />tmp. Скрипт выпол­няет­ся в катало­ге с рас­пакован­ными фай­лами, поэто­му все пути будут отно­ситель­ными.

Те­перь соз­дадим наш уста­нов­щик. Син­таксис коман­ды — makeself.<wbr />sh <<wbr />каталог <wbr />с <wbr />файлами> <<wbr />имя <wbr />выходного <wbr />файла> <<wbr />название <wbr />проекта> <<wbr />команда <wbr />для <wbr />выполнения <wbr />после <wbr />распаковки>.

Путь к коман­де для выпол­нения пос­ле рас­паков­ки тоже пишет­ся отно­ситель­но катало­га с рас­пакован­ными фай­лами. Это единс­твен­ный тон­кий момент в работе с Makeself. Имен­но поэто­му мы помес­тили скрипт setup.<wbr />sh в каталог с фай­лами для упа­ков­ки — Makeself вос­при­нима­ет этот аргу­мент имен­но как коман­ду, а не встра­ивает скрипт в заголо­вок уста­нов­щика.

Заключение

Есть ли смысл исполь­зовать Makeself во вре­мена snap, Flatpak и AppImage? Я вижу два вари­анта, ког­да Makeself все еще акту­ален. Пер­вый — рас­простра­нение само­уста­нав­лива­ющих­ся хот­фиксов в осо­бых слу­чаях, ког­да нор­маль­ный пакет соб­рать невоз­можно или нераци­ональ­но. Вто­рой — под­дер­жка проп­риетар­ных ОС. Скрип­ты Makeself с опци­ями по умол­чанию будут работать на любой POSIX-сов­мести­мой сис­теме, поэто­му, если от тебя тре­буют уста­нов­щик для Solaris или HP-UX, это самый прос­той спо­соб их соз­дать.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий