Простой инсталлятор для Linux средствами bash

Если вам приходилось ставить JDK на вашу Linux-машину, то вы знакомы с этим способом развёртывания приложения. И, если теперь ваша замечательная новая программа должна отправиться к благодарным пользователям, то почему бы не облегчить им жизнь с помощью простого «инсталлятора»? Вот увидите, клиенты это оценят.

Как это выглядит?
Предельно просто. Пользователь загружает .sh файл и запускает его. Скрипт не просто создаёт все директории и т.п., а ещё и извлекает «из себя» файлы приложения и раскладывает их куда нужно.

Как это сделать?
Сначала создаём скрипт, а потом с помощью команды cat добавляем в него архив с файлами.
Например install.sh:

  1. #!/bin/bash
  2. A_F=`readlink -e «$0″`
  3. DIR=`dirname «$A_F»`
  4. TMP_ARH=»tmp.tar.gz»
  5. cd $DIR
  6. echo «Creating temporary arhive $TMP_ARH»
  7. tail -n +15 «$0» > $TMP_ARH
  8. echo «Unpacking temporary arhive $TMP_ARH»
  9. tar xzf $TMP_ARH
  10. echo «Removing temporary arhive $TMP_ARH»
  11. rm -f $TMP_ARH
  12. echo «Installation is complete!»
  13. exit 0
  14. ######

Тут делаем следующее:

  • В строках 2-3 определяем директорию, в которой в данный момент находится скрипт, в строке 5 переходим туда. Все дальнейшие операции выполняем относительно этой директории. 
  • В строке 4 задаём имя временного архива.
  • В строке 7 «отрезаем» бинарную часть нашего скрипта (в данном случае она начинается со строки 15), которую добавим к скрипту позже. Бинарную часть сохраняем как временный архив. 
  • В строке 9 распаковываем архив в текущую директорию и удаляем его в строке 11
  • Завершаем выполнение скрипта в строке 13 (чтобы bash не решил выполнить и наши бинарные данные, расположенные ниже).

Как видно из скрипта в строке 15 начинается архив с нашим приложением. Добавим его:cat my_app.tar.gz >> install.shПосле команды извлечения данных в вашем «инсталляторе» вы сможете сделать также все необходимые симлинки и выполнить другие операции по настройке системы. 

Print Friendly, PDF & Email

Добавить комментарий

Translate »