Last active
September 17, 2019 07:18
-
-
Save don-rumata/583910f73fcfc48d3d09cdefb7f8a013 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# WORK | |
# LANG=ru_RU.UTF-8 | |
# Собираем ГОТОВЫЙ бинарник coredns в пакет для установки с помощью fpm. Он уже должен быть установлен. | |
# https://github.com/jordansissel/fpm | |
# https://fpm.readthedocs.io/en/latest/installing.html | |
MAIN_SERVER="10.10.10.10" | |
WEB_SERVER="$MAIN_SERVER" | |
WEB_NAME_OF_MODULE_FOR_SOFT="soft" | |
PACKAGE_NAME="coredns" | |
PACKAGE_USER="$PACKAGE_NAME" | |
PACKAGE_GROUP="$PACKAGE_NAME" | |
PACKAGE_VERSION="$(curl http://$WEB_SERVER/$WEB_NAME_OF_MODULE_FOR_SOFT/coredns/latest)" | |
# https://github.com/coredns/coredns/blob/master/LICENSE | |
PACKAGE_LICENSE="Apache License 2.0" | |
PACKAGE_CONFIG_DIR="/etc/coredns" | |
# PACKAGE_HOMEDIR="/var/lib/$PACKAGE_USER" | |
PACKAGE_CONFIG_FILE="Corefile" | |
PACKAGE_ARCHITECTURE="x86_64" | |
PACKAGE_MAINTAINER="don Rumata" | |
# https://github.com/coredns/coredns | |
PACKAGE_DESCRIPTION="CoreDNS is a DNS server/forwarder, written in Go, that chains plugins. Each plugin performs a (DNS) function." | |
PACKAGE_URL="https://github.com/coredns/coredns" | |
PACKAGE_WORKDIR="/tmp/$PACKAGE_NAME" | |
PACKAGE_SCRIPT_BEFORE_INSTALL="$PACKAGE_NAME-before-install.sh" | |
PACKAGE_SCRIPT_AFTER_INSTALL="$PACKAGE_NAME-after-install.sh" | |
PACKAGE_FORMAT="rpm" | |
# Создаём и переходим в папку, где будет твориться магия^W сборка. | |
mkdir -p "$PACKAGE_WORKDIR" && cd "$PACKAGE_WORKDIR" || exit 1 | |
# Для бинарника. | |
mkdir -p ./usr/bin | |
# Для файла настроек. | |
mkdir -p ./"$PACKAGE_CONFIG_DIR" | |
# Для юнита systemd. | |
mkdir -p ./usr/lib/systemd/system | |
# Для временных скриптов, которых пока один. | |
mkdir -p ./"$PACKAGE_WORKDIR" | |
#--- Бинарник ---# | |
cd ./usr/bin | |
wget "http://$WEB_SERVER/$WEB_NAME_OF_MODULE_FOR_SOFT/coredns/coredns_latest_linux_$(arch).tgz" || exit 1 | |
tar -xvf coredns_latest_linux_x86_64.tgz | |
rm coredns_latest_linux_x86_64.tgz | |
cd "$PACKAGE_WORKDIR" | |
#----------------# | |
#--- Создаём скрипт, который будет создавать нам ограниченную системную учётку. ---# | |
cd ./"$PACKAGE_WORKDIR" | |
cat > "$PACKAGE_SCRIPT_BEFORE_INSTALL" << EOF | |
#! /bin/bash | |
adduser --system --shell /sbin/nologin --comment 'CoreDNS user' $PACKAGE_USER | |
# --home-dir $PACKAGE_HOMEDIR | |
groupadd $PACKAGE_GROUP | |
usermod -g $PACKAGE_GROUP $PACKAGE_USER | |
# mkdir $PACKAGE_HOMEDIR | |
# chown $PACKAGE_USER:$PACKAGE_GROUP $PACKAGE_HOMEDIR | |
# chmod 775 $PACKAGE_HOMEDIR | |
EOF | |
chmod +x "$PACKAGE_SCRIPT_BEFORE_INSTALL" | |
cd "$PACKAGE_WORKDIR" | |
#----------------------------------------------------------------------------------# | |
#--- Создаём скрипт, который будет конфигурить сервис сразу после его установки. ---# | |
cd ./"$PACKAGE_WORKDIR" | |
cat > "$PACKAGE_SCRIPT_AFTER_INSTALL" << EOF | |
#! /bin/bash | |
systemctl enable coredns.service | |
systemctl start coredns.service | |
EOF | |
chmod +x "$PACKAGE_SCRIPT_AFTER_INSTALL" | |
cd "$PACKAGE_WORKDIR" | |
#---------------------------------------------------------------------------------------# | |
#--- Простейший пример конфига, который работает (проверял на 7-м Центе). Да. Начинается с ".:53". ---# | |
cd ./"$PACKAGE_CONFIG_DIR" | |
cat > "$PACKAGE_CONFIG_FILE" << EOF | |
.:53 | |
{ | |
forward . 8.8.8.8 1.1.1.1 { | |
} | |
cache { | |
success 5000 | |
denial 2500 | |
} | |
log . {combined} { | |
class denial error | |
} | |
errors | |
cancel | |
} | |
EOF | |
cd "$PACKAGE_WORKDIR" | |
#-----------------------------------------------------------------------------------------------------# | |
#--- SystemD Unit ---# | |
cd ./usr/lib/systemd/system | |
wget --output-document coredns.service "http://$WEB_SERVER/$WEB_NAME_OF_MODULE_FOR_SOFT/coredns/coredns.service" || exit 1 | |
cd "$PACKAGE_WORKDIR" | |
#--------------------# | |
#--- BUILD ---# | |
cd "$PACKAGE_WORKDIR" | |
# Внимание на "./", потому что относительные пути очень важны! | |
# https://www.debian.org/doc/manuals/maint-guide/dother.ru.html#conffiles | |
fpm --force \ | |
--name "$PACKAGE_NAME" \ | |
--version "$PACKAGE_VERSION" \ | |
--license "$PACKAGE_LICENSE" \ | |
--config-files ./"$PACKAGE_CONFIG_DIR"/"$PACKAGE_CONFIG_FILE" \ | |
--architecture "$PACKAGE_ARCHITECTURE" \ | |
--maintainer "$PACKAGE_MAINTAINER" \ | |
--description "$PACKAGE_DESCRIPTION" \ | |
--url "$PACKAGE_URL" \ | |
--before-install ./"$PACKAGE_WORKDIR"/"$PACKAGE_SCRIPT_BEFORE_INSTALL" \ | |
--after-install ./"$PACKAGE_WORKDIR"/"$PACKAGE_SCRIPT_AFTER_INSTALL" \ | |
--no-depends \ | |
--no-auto-depends \ | |
--input-type dir --output-type "$PACKAGE_FORMAT" ./ | |
#-------------# |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment