著者:麻生 二郎
小型コンピュータボードの最上位モデルである「Raspberry Pi 4 Model B」の4G/8Gバイト版と、人気のLinuxディストリビューション「Ubuntu」のサーバー版を組み合わせて、本格的なサーバーを構築しましょう。本特集では、テレワークに役立つサーバーアプリの導入方法を紹介します。
シェルスクリプトマガジン Vol.74は以下のリンク先でご購入できます。
図11 Sambaをインストールして実行するシェルスクリプト(samba_install.sh)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
#!/bin/sh ##初期設定 WORKGROUP_NAME="SHMAG" SHARE_NAME="share" SHARE_FOLDER="/var/share" ##Sambaのインストール sudo apt update sudo apt -y install samba ##旧設定バックアップ mkdir -p ~/old_settings sudo mv /etc/samba/smb.conf ~/old_settings/. ##Sambaの共有設定 cat << EOF | sudo tee /etc/samba/smb.conf > /dev/null [global] workgroup = workgroup_name dos charset = CP932 unix charset = UTF8 [share_name] comment = Raspberry Pi share path = share_folder browsable = yes writable = yes create mask = 0777 directory mask = 0777 EOF sudo sed -i -e "s%workgroup_name%'$WORKGROUP_NAME'%" /etc/samba/smb.conf sudo sed -i -e "s%share_name%'$SHARE_NAME'%" /etc/samba/smb.conf sudo sed -i -e "s%share_folder%'$SHARE_FOLDER'%" /etc/samba/smb.conf ##共有フォルダ作成 sudo mkdir -p $SHARE_FOLDER sudo chmod 777 $SHARE_FOLDER ##Sambaの設定反映 sudo systemctl restart smbd sudo systemctl restart nmbd |
図14 MediaWikiを導入するシェルスクリプト(mediawiki_install.sh)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#!/bin/sh ##初期設定 DB_PASSWORD="shmag" ##必要なパッケージのインストール sudo apt update sudo apt -y install mediawiki imagemagick ##データベースの作成 sudo mysql -e "create database my_wiki;" sudo mysql -e "create user 'mediawiki'@'%' identified by '$DB_PASSWORD';" sudo mysql -e "grant all privileges on my_wiki.* to 'mediawiki'@'%';" |
図25 ownCloudをインストールするシェルスクリプト(owncloud_install.sh)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
#!/bin/sh ##初期設定 DB_PASSWORD="shmag" ADMIN_NAME="admin" ADMIN_PASSWORD="admin" OWNCLOUD_FILE="owncloud-10.8.0.tar.bz2" ##ヘルパースクリプト「occ」の作成 cat << EOM | sudo tee /usr/local/bin/occ #! /bin/bash cd /var/www/owncloud sudo -E -u www-data /usr/bin/php /var/www/owncloud/occ "\$@" EOM sudo chmod +x /usr/local/bin/occ ##必要・推奨パッケージのインストール sudo apt update sudo apt -y install apache2 libapache2-mod-php mysql-server php-imagick php-common php-curl php-gd php-imap php-intl php-json php-mbstring php-mysql php-ssh2 php-xml php-zip php-apcu php-redis redis-server sudo apt -y install jq inetutils-ping ##ownCloudの設定ファイル作成 sudo sed -i "s%html%owncloud%" /etc/apache2/sites-available/000-default.conf cat << EOM | sudo tee /etc/apache2/sites-available/owncloud.conf Alias /owncloud "/var/www/owncloud/" <Directory /var/www/owncloud/> Options +FollowSymlinks AllowOverride All <IfModule mod_dav.c> Dav off </IfModule> SetEnv HOME /var/www/owncloud SetEnv HTTP_HOME /var/www/owncloud </Directory> EOM ##Apache HTTP Serverの設定 sudo a2ensite owncloud.conf sudo a2enmod dir env headers mime rewrite setenvif sudo systemctl restart apache2 ##ownCloudの入手と展開 wget https://download.owncloud.org/community/$OWNCLOUD_FILE tar -jxf $OWNCLOUD_FILE sudo mv owncloud /var/www/. sudo chown -R www-data /var/www/owncloud ##データベースの作成 sudo mysql -e "create database owncloud;" sudo mysql -e "create user 'owncloud'@'%' identified by '$DB_PASSWORD';" sudo mysql -e "grant all privileges on owncloud.* to 'owncloud'@'%';" ##ownCloudのインストール echo "しばらくおまちください。" occ maintenance:install --database "mysql" --database-name "owncloud" --database-user "owncloud" --database-pass $DB_PASSWORD --admin-user "$ADMIN_NAME" --admin-pass "$ADMIN_PASSWORD" myip=$(hostname -I|cut -f1 -d ' ') occ config:system:set trusted_domains 1 --value="$myip" ##バックグラウンド処理の設定 occ background:cron sudo sh -c 'echo "*/15 * * * * /var/www/owncloud/occ system:cron" > /var/spool/cron/crontabs/www-data' sudo chown www-data.crontab /var/spool/cron/crontabs/www-data sudo chmod 0600 /var/spool/cron/crontabs/www-data ##キャッシュとロックファイルの作成 occ config:system:set memcache.local --value '\OC\Memcache\APCu' occ config:system:set memcache.locking --value '\OC\Memcache\Redis' occ config:system:set redis --value '{"host": "127.0.0.1", "port": "6379"}' --type json ##ログローテーションの設定 cat << EOM | sudo tee /etc/logrotate.d/owncloud /var/www/owncloud/data/owncloud.log { size 10M rotate 12 copytruncate missingok compress compresscmd /bin/gzip } EOM |
図29 RainLoopをインストールするシェルスクリプト(rainloop_install.sh)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#!/bin/sh ##初期設定 SIZE="100M" DB_PASSWORD="admin" ##必要なパッケージの導入 sudo apt update sudo apt -y install apache2 php php-curl php-xml php-mysql mysql-server unzip ##RainLoop Webmailの導入 wget https://www.rainloop.net/repository/webmail/rainloop-community-latest.zip sudo mkdir -p /var/www/html/rainloop sudo unzip rainloop-community-latest.zip -d /var/www/html/rainloop/. sudo chown -R www-data /var/www/html/rainloop cat << EOF | sudo tee /etc/apache2/sites-available/rainloop.conf >> /dev/null <Directory /var/www/html/rainloop/data> Require all denied </Directory> EOF sudo a2ensite rainloop ##連絡先データベースの作成とApacheに反映 sudo mysql -e "create database rainloop;" sudo mysql -e "create user 'rainloop'@'%' identified by '$DB_PASSWORD';" sudo mysql -e "grant all privileges on rainloop.* to 'rainloop'@'%';" ##添付ファイルサイズの拡大 sudo sed -i -e "s%upload_max_filesize = 2M%upload_max_filesize = '$SIZE'%" /etc/php/7.4/apache2/php.ini sudo sed -i -e "s%post_max_size = 8M%post_max_size = '$SIZE'%" /etc/php/7.4/apache2/php.ini sudo systemctl restart apache2 |
図36 Mattermostをインストールするシェルスクリプト(mattermost_install.sh)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
#!/bin/sh ##初期設定 DB_PASSWORD="shmag" MATTERMOST="v5.39.0/mattermost-v5.39.0-linux-arm64.tar.gz" SITE_URL="http://192.168.11.100/" ##データベースの作成 sudo apt update sudo apt -y install mysql-server sudo mysql -uroot -e "create user 'mmuser'@'%' identified by '$DB_PASSWORD';" sudo mysql -uroot -e "create database mattermost;" sudo mysql -uroot -e "grant all privileges on mattermost.* to 'mmuser'@'%';" ##mattermostの入手と展開 wget https://github.com/SmartHoneybee/ubiquitous-memory/releases/download/$MATTERMOST tar -xvzf mattermost*.gz sudo mv mattermost /opt sudo mkdir /opt/mattermost/data sudo useradd --system --user-group mattermost sudo chown -R mattermost:mattermost /opt/mattermost sudo chmod -R g+w /opt/mattermost ##設定ファイルの書き換え sudo sed -i -e 's%"postgres"%"mysql"%' /opt/mattermost/config/config.json sudo sed -i -e 's%postgres://mmuser:mostest@localhost/mattermost_test?sslmode=disable\\u0026connect_timeout=10%mmuser:'$DB_PASSWORD'@tcp(localhost:3306)/mattermost?charset=utf8mb4,utf8\&writeTimeout=30s%' /opt/mattermost/config/config.json sudo sed -i -e 's%"SiteURL": "",%"SiteURL": "'$SITE_URL'",%' /opt/mattermost/config/config.json ##起動・停止ファイルの作成 cat << EOF | sudo tee /lib/systemd/system/mattermost.service > /dev/null [Unit] Description=Mattermost After=network.target After=mysql.service BindsTo=mysql.service [Service] Type=notify ExecStart=/opt/mattermost/bin/mattermost TimeoutStartSec=3600 KillMode=mixed Restart=always RestartSec=10 WorkingDirectory=/opt/mattermost User=mattermost Group=mattermost LimitNOFILE=49152 [Install] WantedBy=mysql.service EOF ##mattermostの起動と自動起動設定 sudo systemctl daemon-reload sudo systemctl start mattermost sudo systemctl enable mattermost |
図43 MosP勤怠管理をインストールするシェルスクリプト(mosp_install.sh)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/bin/sh ##初期設定 MOSP="time4.war" ##必要なパッケージのインストール sudo apt update sudo apt -y install tomcat9 tomcat9-admin postgresql ##Mosp勤怠管理の導入 sudo chown tomcat:tomcat $MOSP sudo chmod 775 $MOSP sudo mv $MOSP /var/lib/tomcat9/webapps/. ##データベース管理者に切り替え sudo -i -u postgres ##初期設定 DBADMIN_PASSWORD="shmag" ##管理者パスワード設定 psql -c "alter role postgres with password '$DBADMIN_PASSWORD';" |
図A3 ラズパイサーバーの初期設定(ubuntu_init1.sh)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/bin/sh ##日本のタイムゾーン設定 sudo timedatectl set-timezone Asia/Tokyo ##全ソフトウエア更新 sudo apt update sudo apt -y upgrade sudo apt -y autoremove sudo apt clean ##ファームウエアアップデート sudo apt -y install rpi-eeprom sudo rpi-eeprom-update ##完了後の再起動 read -p "再起動しますか [y/N]:" YN if [ " $YN" = " y" ] || [ " $YN" = " Y" ]; then sudo reboot fi |
図A4 ラズパイサーバーの初期設定(ubuntu_init2.sh)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#!/bin/sh ##固定IPアドレス IP_ADDRESS="192.168.10.100" ##旧設定バックアップ mkdir -p ~/old_settings sudo mv /etc/netplan/50-cloud-init.yaml ~/old_settings/. ##新ネットワーク設定作成 cat << EOF | sudo tee /etc/netplan/50-cloud-init.yaml > /dev/null network: ethernets: eth0: dhcp4: false addresses: [ip_address/24] gateway4: 192.168.10.1 nameservers: addresses: [8.8.8.8] version: 2 EOF sudo sed -i -e "s%ip_address%$IP_ADDRESS%" /etc/netplan/50-cloud-init.yaml ##ネットワーク設定反映 sudo netplan apply |
図A3 データ領域を拡張するシェルスクリプト(storage_expand.sh)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/bin/sh ##パーティション作成とフォーマット sudo parted -s /dev/sda rm 1 sudo parted -s /dev/sda mklabel msdos sudo parted -s /dev/sda mkpart primary 0% 100% sudo mke2fs -t ext4 -F /dev/sda1 ##/varディレクトリに自動マウント sudo e2label /dev/sda1 usbssd sudo sh -c "echo 'LABEL=usbssd /var ext4 defaults 0 0' >> /etc/fstab" ##読み書き許可と/varディレクトリコピー sudo mount /dev/sda1 /mnt sudo chmod 777 /mnt sudo cp -a /var/* /mnt ##完了後の再起動 read -p "再起動しますか [y/N]:" YN if [ " $YN" = " y" ] || [ " $YN" = " Y" ]; then sudo reboot fi |