著者:麻生 二郎
小型コンピュータボードの最上位モデルである「Raspberry Pi 4 Model B」の4G/8Gバイト版と、人気のLinuxディストリビューション「Ubuntu」のサーバー版を組み合わせて、本格的なサーバーを構築しましょう。本特集では、テレワークに役立つサーバーアプリの導入方法を紹介します。
シェルスクリプトマガジン Vol.74は以下のリンク先でご購入できます。![]()
![]()
図11 Sambaをインストールして実行するシェルスクリプト(samba_install.sh)
#!/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)
#!/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)
#!/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)
#!/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)
#!/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)
#!/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)
#!/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)
#!/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)
#!/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