Debianをインストール後の初期設定や私がよく使用するshellの処理

私がDebian構築時に使用する処理のまとめ
<font color=red>**※一つのshellを実行したら、環境構築が完了となるように調整は必須です
※設定は別ファイルにまとめてください**</font>

# ■よく使用する処理について

* 実行したshllのディレクトリを取得

```bash
# /tmp/test/test.sh を実行した場合、DIR_CURに /tmp/test/ を設定ます
DIR_CUR=$(dirname "${BASH_SOURCE:-$0}")"/"
# 実行したshellと同じディレクトリの variables.sh を読み込む場合
source ${DIR_CUR}variables.sh
```

* 複数行の文字列をファイルに出力

```bash
{ \
    echo '一行目'; \
    echo '二行目'; \
} > /tmp/aaa.txt
```

# ■設定

* 日本語周りの設定（他にもありますので、自身の環境の合わせてください）

```bash
{ \
    echo 'case $TERM in'; \
    echo '  linux)LANG=C ;;'; \
    echo '  *)LANG=ja_JP.UTF-8 ;;'; \
    echo 'esac'; \
} >> /etc/bash.bashrc
```

* viの設定（好みによると思います）

```bash
echo 'set nocompatible' >> ~/.vimrc
```

* Debianの設定

```bash
# サスペンドさせない
{ \
    echo 'HandleLidSwitch=ignore'; \
} >> /etc/systemd/logind.conf
# Debian GUI環境にのみ存在
WORK_FILE=/etc/gdm3/greeter.dconf-defaults
if [ -f ${WORK_FILE} ]; then
  sed -i \
        -e 's/^# \(sleep-inactive-ac-timeout=\).\+$/\10/' \
        -e 's/^# \(sleep-inactive-battery-timeout=\).\+$/\10/' \
        ${WORK_FILE}
fi

# GUIがある場合はCUIに切り替え
systemctl set-default multi-user.target
```

* VirtualBoxにDebianをインストール後、固定IPに変更にする

```bash
# ネットワーク
INTERFACES_VB_ADDR=192.168.1.10
INTERFACES_VB_NETWORK=192.168.1.0
INTERFACES_VB_NETMASK=255.255.255.0
INTERFACES_VB_GATEWAY=192.168.1.1

# ネットワークのデバイス名を取得
DEVICE_NAME=$(ip route | sed -n 1P  | sed 's/^.\+dev\s\([a-z0-9]\+\).\+/\1/')

sed -i \
      -e "s/\(iface ${DEVICE_NAME} inet dhcp\)/#\1/" \
      /etc/network/interfaces \
    && { \
        echo "auto  ${DEVICE_NAME}"; \
        echo "iface ${DEVICE_NAME} inet static"; \
        echo "  address ${INTERFACES_VB_ADDR}"; \
        echo "  network ${INTERFACES_VB_NETWORK}"; \
        echo "  netmask ${INTERFACES_VB_NETMASK}"; \
        echo "  gateway ${INTERFACES_VB_GATEWAY}"; \
        echo "  dns-nameservers 8.8.8.8 ${INTERFACES_VB_GATEWAY}"; \
    } >> /etc/network/interfaces.d/local

```

# ■アプリケーションの設定

* Cronの設定を変更

```bash
# 設定（基本的に設定は共通設定ファイルから読込）
MAIL_SYSTEM=system@test.local

WORK_MAIL_SYSTEM=$(echo ${MAIL_SYSTEM} | sed -e 's/\./\\\./g')

sed -i \
    -e "s/^\(PATH=.\+\)$/\1\nMAILTO=\"${WORK_MAIL_SYSTEM}\"/" \
    /etc/crontab
```

* ユーザの設定（SSHはOSインストール時に有効）

```bash
# OS作成時のユーザ
USER_ID_DEFAULT=vb-user
# グループ
USER_GROUP_DEVELOPER=developer

sed -i \
      -e 's/^#\(PermitRootLogin\s\).\+$/\1forced-commands-only/' \
      /etc/ssh/sshd_config \
    && groupadd ${USER_GROUP_DEVELOPER} \
    && usermod -aG ${USER_GROUP_DEVELOPER} ${USER_ID_DEFAULT}
```

* Postfixをインストール

```bash
# header_checks で外にメールが出ていかないようにします
# その他設定は各自の環境に合わせます
apt-get install -y \
      libsasl2-modules \
      postfix \
      syslog-ng \
    && mv /etc/postfix/main.cf /etc/postfix/main.cf.bk \
    && { \
        echo '/^To:.*@test.local/ OK'; \
        echo '/^To:.*/ REDIRECT system@test.local'; \
    } > /etc/postfix/header_checks \
    && { \
        echo 'alias_database = hash:/etc/aliases'; \
        echo 'alias_maps = hash:/etc/aliases'; \
        echo 'command_directory = /usr/sbin'; \
        echo 'daemon_directory = /usr/lib/postfix/sbin'; \
        echo 'data_directory = /var/lib/postfix'; \
        echo 'header_checks = regexp:/etc/postfix/header_checks'; \
        echo 'html_directory = no'; \
        echo 'inet_interfaces = localhost'; \
        echo 'inet_protocols = ipv4'; \
        echo 'mail_owner = postfix'; \
        echo 'mailq_path = /usr/bin/mailq'; \
        echo 'manpage_directory = /usr/share/man'; \
        echo 'mydestination = localhost'; \
        echo 'myhostname = test.local'; \
        echo 'newaliases_path = /usr/bin/newaliases'; \
        echo 'queue_directory = /var/spool/postfix'; \
        echo 'sendmail_path = /usr/sbin/sendmail'; \
        echo 'setgid_group = postdrop'; \
        echo 'unknown_local_recipient_reject_code = 550'; \
    } > /etc/postfix/main.cf
```

* VirtualBoxの設定

```bash
# mount
DIR_MOUNT_ROOT=/media/

DEBIAN_FRONTEND=noninteractive \
    apt-get install -y \
          build-essential \
          module-assistant \
    && echo Y | m-a prepare \
    && mount ${DIR_MOUNT_ROOT}cdrom

# VBox -> 共有フォルダ設定
sh ${DIR_MOUNT_ROOT}cdrom/VBoxLinuxAdditions.run

# VBox -> 共有フォルダ設定でrebootは必須
/sbin/reboot

```