某AIにお手軽にMastodonを構築するためのスクリプトを作らせた 第三章

ということで、

Question：先述(第二章参照)のスクリプトを実行したが”Mastodonユーザーの作成”まで進んだが、その先以降スクリプトが進まなくなった。原因を突き止めて修正版を作成して欲しい。

Answer：問題の原因は、sudo su - mastodon コマンドで Mastodon ユーザーに切り替えているため、その後のコマンドが実行されないことです。代わりに、Mastodon ユーザーとしてコマンドを実行するには sudo -u mastodon を使用します。

修正版のスクリプトは以下の通りです。
```
#!/bin/bash

echo "Mastodonインストールスクリプトへようこそ！"

# 依存関係のインストール
echo "依存関係をインストールします。"
sudo apt update
sudo apt install -y wget curl git imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git-core g++ libprotobuf-dev protobuf-compiler pkg-config nodejs gcc autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev redis-server redis-tools

# Node.jsとYarnのインストール
echo "Node.jsとYarnをインストールします。"
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt install -y nodejs
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update
sudo apt install -y yarn

# rbenvとRubyのインストール
echo "rbenvとRubyをインストールします。"
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
rbenv install 2.7.2
rbenv global 2.7.2

# Mastodonユーザーの作成
echo "Mastodonユーザーを作成します。"
sudo adduser --disabled-login --gecos "" mastodon

# Mastodonのクローンと設定
echo "Mastodonをクローンし、設定ファイルを作成します。"
sudo -u mastodon git clone https://github.com/tootsuite/mastodon.git /home/mastodon/live
sudo -u mastodon sh -c "cd /home/mastodon/live; git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)"
sudo -u mastodon sh -c "cd /home/mastodon/live; bundle install --deployment --without development test"
sudo -u mastodon sh -c "cd /home/mastodon/live; yarn install --pure-lockfile"
sudo -u mastodon cp /home/mastodon/live/.env.production.sample /home/mastodon/live/.env.production

# 対話形式で必要なパラメータを入力
echo "必要なパラメータを入力してください。"
read -p "ドメイン名 (例: example.com): " domain
read -p "管理者のメールアドレス: " admin_email
read -p "SMTPサーバーアドレス: " smtp_server
read -p "SMTPポート: " smtp_port
read -p "SMTPユーザー名: " smtp_username
read -p "SMTPパスワード: " smtp_password

# .env.productionファイルにパラメータを設定
sudo -u mastodon sed -i "s/LOCAL_DOMAIN=.*/LOCAL_DOMAIN=$domain/" /home/mastodon/live/.env.production
sudo -u mastodon sed -i "s/SMTP_SERVER=.*/SMTP_SERVER=$smtp_server/" /home/mastodon/live/.env.production
sudo -u mastodon sed -i "s/SMTP_PORT=.*/SMTP_PORT=$smtp_port/" /home/mastodon/live/.env.production
sudo -u mastodon sed -i "s/SMTP_LOGIN=.*/SMTP_LOGIN=$smtp_username/" /home/mastodon/live/.env.production
sudo -u mastodon sed -i "s/SMTP_PASSWORD=.*/SMTP_PASSWORD=$smtp_password/" /home/mastodon/live/.env.production
sudo -u mastodon sed -i "s/SMTP_FROM_ADDRESS=.*/SMTP_FROM_ADDRESS=noreply@$domain/" /home/mastodon/live/.env.production

# データベースの設定
echo "データベースを設定します。"
sudo apt install -y postgresql postgresql-contrib
sudo -u postgres psql -c "CREATE USER mastodon CREATEDB;"
sudo -u postgres psql -c "CREATE DATABASE mastodon OWNER mastodon;"
sudo -u mastodon sh -c "cd /home/mastodon/live; RAILS_ENV=production bundle exec rake mastodon:setup"

# Nginxのインストールと設定
echo "Nginxをインストールし、設定します。"
sudo apt install -y nginx
sudo rm /etc/nginx/sites-enabled/default
sudo cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon
sudo ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/
sudo sed -i "s/example\.com/$domain/" /etc/nginx/sites-enabled/mastodon

# Let's Encrypt証明書の取得
echo "Let's Encrypt証明書を取得します。"
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d $domain --agree-tos --email $admin_email --redirect

# サービスの設定
echo "サービスを設定します。"
sudo cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/
sudo systemctl enable /etc/systemd/system/mastodon-*.service
sudo systemctl start mastodon-web.service mastodon-sidekiq.service mastodon-streaming.service

# ファイアウォールの設定
echo "ファイアウォールを設定します。"
sudo apt install -y ufw
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw --force enable

echo "Mastodonのインストールが完了しました！"
```
この修正版のスクリプトでは、sudo su - mastodon の代わりに sudo -u mastodon を使用して、Mastodon ユーザーとして各コマンドを実行しています。これにより、スクリプトが途中で停止することなく完了するはずです。

さて上手く完成するかな？