Скрипты Bash, которые я держу в рукаве -3


AliExpress RU&CIS

Случалось ли такое, что из разу в раз при установке того или иного дистрибутива вам нужно было устанавливать одни и те же программы? У меня вот случалось и часто. Я не поддерживаю дистрохопперство (перескакивание с дистрибутива на дистрибутив), однако порой выходят релизы, которые хочется пощупать руками и не на виртуалке. Для этого у меня есть отдельный ноутбук, который я использую как "тестовый".

Выполняя очередную установку утилит на Linux я подумал нельзя ли быстро автоматизировать данный процесс? И так появился l-scripts.

В чём задумка? Написать репозиторий, в котором бы находились все необходимые скрипты для установки того или иного программного обеспечения, которого нет в стандартных репозиториях той или иной системы (будем делить системы на три ветки: Debian (deb), Red Hat (rpm), Arch Linux). А также скрипты для быстрой настройки системы, чтобы не возиться из разу в раз с одними и теми же твиками.

Можно конечно пойти путем наименьшего сопротивления, написать один большой скрипт для каждой системы или с помощью условия и команды test проверить какой пакетный менеджер установлен и устанавливать пакеты из массива, но тогда мы возможно установим то, что нам и не требуется. Я выделил для каждой нужной мне программы отдельный скрипт, написал вверху каждого комментарий с 3-мя строками:

# Author: Daniil Shilo (daniilshilo-developer) <daniilshilo.developer@gmail.com>
# Description: Что делает
# Destination: Как делает

Данные скрипты достаточно легкие для понимания и хорошо задокументированы. Я объявил функцию message для того чтобы оповещать пользователя о том, какой именно процесс сейчас происходит:

Оповещение пользователя об этапах установки
Оповещение пользователя об этапах установки

Также сам пример такого скрипта:

#!/usr/bin/env bash
# Author: Daniil Shilo (daniilshilo-developer) <daniilshilo.developer@gmail.com>
# Description: Installs Sublime Text
# Destination: This script will import GPG keys for Sublime Text and install it

# Function for output messages
function message() {
	if ! [[ $2 ]]; then
		# Green bold text
		echo -e '\033[1;32m'$1'\033[0m'
	else
		# Green, red and blue text
		echo -e '\033[1;32m'$1'\033[1;31m >> \033[1;34m'$2'\033[0m'
	fi
}

message 'Installing Sublime Text' 'Importing gpg keys'
sudo rpm -v --import https://download.sublimetext.com/sublimehq-rpm-pub.gpg

message 'Installing Sublime Text' 'Adding Sublime Text repo'
sudo dnf config-manager --add-repo https://download.sublimetext.com/rpm/stable/x86_64/sublime-text.repo


message 'Installing Sublime Text' 'Installing Sublime Text'
sudo dnf install -y sublime-text

Я буду поддерживать скрипты, для того чтобы они были актуальны и пользователи могли спокойно устанавливать программы из сторонних репозиториев. Если пользователь не доверяет безопасности, то всех скрипты с открытым исходным кодом, можно всегда проверить что делает тот или иной скрипт.

Как это упростит жизнь?

Я допускаю что каждый пользователь Linux, который может разобраться в данных скриптах может сам проделать все действия которые в них описаны, но допустим что у нас есть следующий кейс: человеку нужно установить Docker на свою машину, ему придётся гуглить сайт докера, искать в документации как именно его установить и что для этого нужно сделать. (Напоминаю, что установить Docker из стандартных репозиториев теперь невозможно в Fedora и Ubuntu, ссылка на источник)

Вместо этого человек может просто клонировать репозиторий, выбрать ветку, которая соответствует системе и запустить docker.sh, который сам разберется как устанавливать Docker и сделает это без боли.

#!/usr/bin/env bash
# Author: Daniil Shilo (daniilshilo-developer) <daniilshilo.developer@gmail.com>
# Description: Installs Docker Engine on Fedora
# Destination: This script will add Docker repository to local list of repositories and install docker-ce, docker-ce-cli containerd.io packages

# Function for output messages
function message() {
	# Green bold text
	echo -e '\033[1;32m'$1'\033[0m'
}

message 'Removing old Docker instances'
sudo dnf remove -y docker \
  docker-client \
  docker-client-latest \
  docker-common \
  docker-latest \
  docker-latest-logrotate \
  docker-logrotate \
  docker-selinux \
  docker-engine-selinux \
  docker-engine

message 'Adding Docker repositories to local list'
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager \
  --add-repo \
  https://download.docker.com/linux/fedora/docker-ce.repo

message 'Installing Docker on the machine'
sudo dnf install -y docker-ce \
  docker-ce-cli \
  containerd.io \
  docker-compose

message 'Starting Docker services'
sudo systemctl enable --now docker

message 'Post-installation steps'
sudo groupadd docker # Adding new group
sudo usermod -aG docker $USER # Adding current user to the group
newgrp docker # Activate privileges

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

Также, если вам интересна тематика веб-разработки и линуксоводства, то буду рад увидеть вас в моём dev-log (tg).




Комментарии (20):