LINUX.ORG.RU

Самораспаковывающийся tar.gz

 ,


1

3

Делаю установщик для продукта. Сам продукт распространяется в архиве, который распаковывается в /opt. Решил, что для пользователя будет удобно, если будет не архив с архивом и скриптом установки, а что-то вроде .run файла драйверов проприетарных. Нагуглил как это делается:

#!/bin/bash
sed '0,/^#EOF#$/d' $0 | tar zx; exit 0
#EOF#
How to use:
# create sfx
cat selfextract.sh data.tar.gz >example_sfx.sh
# unpack sfx
bash example_sfx.sh

Но при попытке запустить распаковку, получаю:

gzip: stdin: Unexpected end of file

tar: Child returned status 1
tar: Error is not recoverable

Вопрос. Что я делаю не так? Может ли это быть из-за того что архив размером больше 2х гигабайт? (а иногда и больше 6)

Есть мысль, что это из-за того что бинарник содержит \0 внутри и не передается нормально на вход. Но судя по комментариям на SOF, у других всё работает.

PS: В будущем вероятно это будет в deb\rpm\etc, но пока что нет ресурсов делать пакеты для разных ОС.

★★★★★

Последнее исправление: Loki13 (всего исправлений: 1)

PS: В будущем вероятно это будет в deb\rpm\etc, но пока что нет ресурсов делать пакеты для разных ОС.

Тогда делай так, чтобы работало из розпакованого с архива каталога. Запускать твою шел-портянку от рута нормальные люди не станут.

urxvt ★★★★★
()
Ответ на: комментарий от urxvt

Запускать твою шел-портянку от рута нормальные люди не станут.

А люди и не будут. Будет администратор компании покупателе софта. Пользователи уже установленным и настроенным будут пользоваться. А то так можно сказать, что пользователи и мой rpm\deb ставить не будут(по факту тот же архив со скриптом унутре).

Loki13 ★★★★★
() автор топика
Ответ на: комментарий от serg002

Так показывают. Я же эту ошибку и привёл в ОП. Я подозреваю, что анонимус прав и надо в base64 всё загонять предварительно. Меня смутило, что на SOF это выглядит(по комментариям и по отзывам) как рабочее решение.

Loki13 ★★★★★
() автор топика

Ты вот прям такое содержание в selftextract.sh засунул?

#!/bin/bash
sed '0,/^#EOF#$/d' $0 | tar zx; exit 0
#EOF#
How to use:
# create sfx
cat selfextract.sh data.tar.gz >example_sfx.sh
# unpack sfx
bash example_sfx.sh

How to use и дальше там не должно быть, это инструкция же а не скрипт. Оно попадает в итоге в example_sfx.sh и вместо tar-архива в tar zx шлётся сначала эта инструкция и получается битый.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Конечно нет. Это я сюда принёс алгоритм по которому делал. А так, сделал selfextract.sh из верхних строчек. А вообще, кажется я, блин, понял где у меня руки кривые. Я ж, #EOF# не добавил в файл selfextract.sh. Подумал, что это он на маркер какой проверяет, который после cat остается. Вот ведь тупая башка у меня!

Спасибо за наводку пересмотреть что написано. :)

Loki13 ★★★★★
() автор топика
Ответ на: комментарий от PPP328

У gog все run-скрипты имеют в себе прям бинарь. Посмотрите, как у них.

У меня уже заработало. Я в глаза долбился и продолбил маркер #EOF# у скрипта.

Loki13 ★★★★★
() автор топика
Последнее исправление: Loki13 (всего исправлений: 1)
Ответ на: комментарий от Loki13

Ну так и делай в RPM. Он на самом деле простой. Сложно может быть соблюсти полиси федоры типа «не паковать библиотеки и шрифты», но тут-то тебе до лампочки на всю эту красоту, хоть статически линкуй или все .soшки тащи с собой.

legolegs ★★★★★
()
Ответ на: комментарий от Loki13

ему это нафиг не надо, если только это не клоун какой-то которого выдернули с виндоус сервера и сказали вот те линукс, кушай его за 15 000 рублей в месяц теперь большой ложкой.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

ему это нафиг не надо

А кто его будет спрашивать? Компания купила софт за 100500 денег и он должен его установить на рабочие места сотрудников. Будет ставить по инструкции от компании поставщика софта, никуда не денется.

Loki13 ★★★★★
() автор топика
Последнее исправление: Loki13 (всего исправлений: 1)
Ответ на: комментарий от Loki13

лучше сделайте так чтоб он ansible мог это дело развернуть. Потом он будет ругать вас своему начальству и может так стать что они уйдут к более адекватному поставщику софта.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Софт вообще легко будет разворачиваться sh /любой_примонтированный сетевой_каталог"/setup.sh

Куда уж проще? Выполнить скрипт, который сам себя распакует в /opt

Loki13 ★★★★★
() автор топика
Ответ на: комментарий от Loki13

Тогда зачем то что ты делаешь? Это делают когда на 1 машине юзер-нуб, который не слышал ничего ни про архивы, ни про консольку, ни про скрипты просто 2 раза мышкой тыкает (в случае линукса 1 но не суть) и ему оп-па инсталятор вылезает где он ничего не делает и оно само. А тут оказывается у вас не юзер, а админ, которому надо на 1000 компах развернуть вашу софтину (ему тоже мышкой тыкать придётся на каждом компе? Это специально чтоб у него работа была правильно?). Я вот с ходу не хотел бы скрипт делать который ваш непонятный файл будет приводить к нужному виду и потом его куда-то распаковывать и предпочёл бы просто вбить в консольку условный unarchive откуда куда (unarchive такой команды нет, под ней я понимаю unzip/xz/7z и т.д. в зависимости от вашего формата архива). Короче думайте о целевой аудитории всегда, а не о том, как свою нужность начальству показать, а то если там кто-то типа меня сидит, то я бы 10 раз подумал прежде чем непонятных самодеятелей предлагающих сомнительные улучшения не то чтобы повышать, а вообще им какую-то самостоятельность давать.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Всё идет от того что я не уверен, что в конторе, купившей софт, админ будет не уровня эникея. Тогда мне проще сделать инструкцию из 2-х пунктов. 1. Скачать файл. 2. Запустить от имени админа(в /opt же ставится). А если админ любознательный и захочет посмотреть что делает мой скрипт, он откроет его вимом и всё увидит в первых 5 строчках(там полный примитив).

PS: вариант с архивом тоже конечно есть. из этого архива и делается то самое, что в ОП.

PPS: Следующим этапом будет уже deb\rpm из этого всего. Но это сложнее, т.к. придется тестировать эти пакеты на то что они смогут быть установлены на всех целевых системах.

Loki13 ★★★★★
() автор топика
Последнее исправление: Loki13 (всего исправлений: 2)
Ответ на: комментарий от Loki13

Уверен, есть инструменты, которые произвольную структуру закатают и в deb и в rpm без проблем.

Но вообще, можно rpm. И alien-ом ставить вместо deb. Крипто Про свои продукты так и распространяет. А может у них уже и deb-пакеты появились.

thegoldone
()
Ответ на: комментарий от thegoldone

А с другой стороны, чем невидия не подойдет как пример. Они(да и не только они) свои драйверы как раз в .run файле распространяют. Для проприетарщины вполне годный вариант.

Loki13 ★★★★★
() автор топика
Ответ на: комментарий от Loki13

Куда уж проще? Выполнить скрипт, который сам себя распакует

это сложнее, потому что не ясно распакуется он в текущую директорию или еще куда-то. если еще куда-то, то нужен ли ему root? во-вторых, не ясно это просто архив или он что-то еще делает (компилирует что-то, настраивает систему). если что-то еще делает, то тогда не ясно нужен ли ему root. у него хоть --help есть? распаковку тарболла отмененную или сломавшуюся на полпути можно откатить хотя бы вручную, т.к. есть список файлов, у твоей херни - нет. определить относится ли некоторый файл к некоторому ПО через dnf можно, потому что у rpm в целом есть список файлов, у твоей херни - нет.

Запустить от имени админа(в /opt же ставится).

на практике многие сторонние непакетированные программы способные целиком разместиться и работать из opt могут работать из любой директории, opt не требуют, и вообще про него не знают. их тарболл сам по себе очевидно не требует рута.

я не уверен, что в конторе, купившей софт, админ будет не уровня эникея

откуда такое предположение об этих людях? есть и другое предположение, там окажутся люди более способные к логическому мышлению чем ты, да и грамотнее чем ты.

asdpm
()
Ответ на: комментарий от asdpm

это сложнее, потому что не ясно распакуется он в текущую директорию или еще куда-то.

Весь алгоритм распаковки и установки в 5 строчках на баше и они сверху расположены. там тупой tar xf ... -C /

если еще куда-то, то нужен ли ему root?

А это написано в инструкции по установке. По идее можно и не в /opt ставить(а куда, если нужно для всех пользователей поставить?), но вроде бы это по FHS правильное место для такого софта.

Loki13 ★★★★★
() автор топика
Ответ на: комментарий от Loki13

я выше сказал о том, некоторые популярные сегодня непакетированные программы могут работать из любой директории.

По идее можно и не в /opt ставить(а куда, в opt конечно, но это пользователь решит.

там тупой tar xf … -C /

тогда зачем он sfx?

А это написано в инструкции по установке

то есть инструкция всё равно есть

asdpm
()
Ответ на: комментарий от asdpm

тогда зачем он sfx?

Чтобы не пугать страшными заклинаниями - раз, чтобы выполнить ещё парочку команд для установки прав доступа на пару каталогов и не грузить этим админа(а если он забьет на эти команды, то софт может работать некорректно).

Loki13 ★★★★★
() автор топика