#!/usr/bin/env bash SS_HOSTNAME=${1:-"example.jp"} SS_USER=${2:-"$USER"} SS_DIR=/var/www/shirasagi PORT_COMPA=8001 PORT_CHILD=8002 PORT_OPEND=8003 PORT_LPSPL=8004 # selinux sudo sed -i "s/\(^SELINUX=\).*/\1disabled/" /etc/selinux/config sudo setenforce 0 sudo dnf -y upgrade almalinux-release sudo dnf -y groupinstall "Development tools" --setopt=group_package_types=mandatory,default,optional sudo dnf -y install epel-release openssl-devel sudo dnf config-manager --disable epel sudo dnf --enablerepo=epel -y update epel-release sudo dnf -y --enablerepo=epel,powertools install ImageMagick ImageMagick-devel git wget libyaml-devel cat </dev/null 2>&1; then echo "asdf がインストールされています。" return 0 else echo "asdf がインストールされていません。" return 1 fi } # asdf のインストール(すでにクローン済みかチェック) if [ ! -d /usr/local/asdf ]; then echo "Cloning asdf..." sudo git clone https://github.com/asdf-vm/asdf.git /usr/local/asdf if [ $? -ne 0 ]; then echo "asdf のクローンに失敗しました。" exit 1 fi else echo "asdf は既にインストールされています。" fi # root ユーザーの場合の処理 if [ "$SS_USER" = "root" ]; then echo "root ユーザーでは実行できませんが、スクリプトは続行します。" else echo "処理を続行します..." # グループが存在しない場合は作成 if ! getent group asdf >/dev/null; then sudo groupadd asdf fi # /usr/local/asdf の権限設定 sudo chgrp -R asdf /usr/local/asdf sudo chmod -R g+rwXs /usr/local/asdf # ユーザーをグループに追加 sudo usermod -aG asdf "$SS_USER" # /usr/local/asdf の所有者とグループを変更 sudo chown -R "$SS_USER":asdf /usr/local/asdf fi # asdf の環境設定ファイルを作成 if [ ! -f /etc/profile.d/asdf.sh ]; then echo "Creating /etc/profile.d/asdf.sh..." echo 'export ASDF_DIR=/usr/local/asdf export ASDF_DATA_DIR=$ASDF_DIR ASDF_BIN="${ASDF_DIR}/bin" ASDF_USER_SHIMS="${ASDF_DATA_DIR}/shims" PATH="${ASDF_BIN}:${ASDF_USER_SHIMS}:${PATH}" . "${ASDF_DIR}/asdf.sh" . "${ASDF_DIR}/completions/asdf.bash" ' | sudo tee /etc/profile.d/asdf.sh >/dev/null if [ $? -ne 0 ]; then echo "/etc/profile.d/asdf.sh の作成に失敗しました。" exit 1 fi else echo "/etc/profile.d/asdf.sh は既に存在しています。" fi source /etc/profile/asdf.sh export SS_HOSTNAME=${1:-"example.jp"} export SS_USER=${2:-"$USER"} export SS_DIR=/var/www/shirasagi export PORT_COMPA=8001 export PORT_CHILD=8002 export PORT_OPEND=8003 export PORT_LPSPL=8004 check_asdf_installed() { if command -v asdf >/dev/null 2>&1; then return 0 # `asdf` コマンドが存在する場合、成功を示すステータスコード 0 を返します。 else return 1 # `asdf` コマンドが存在しない場合、失敗を示すステータスコード 1 を返します。 fi } # asdf コマンドの確認 if ! check_asdf_installed; then echo "asdf コマンドが利用できません。シェルの設定をリロードして再度確認します。" # シェルの設定ファイルをリロード exec bash -c "source /etc/profile.d/asdf.sh && echo '再度確認: $(command -v asdf)'; exec bash" # exec "$0" "$@" fi # asdf プラグインと言語のインストール echo "Installing asdf plugins and languages..." asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git asdf install ruby 3.2.5 asdf global ruby 3.2.5 if ! command -v ruby >/dev/null; then echo 'Rubyのインストールに失敗しました' exit 1 fi asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git asdf install nodejs 20.5.0 asdf global nodejs 20.5.0 if ! command -v node >/dev/null; then echo 'Node.js のインストールに失敗しました' exit 1 fi npm install -g yarn if [ $? -ne 0 ]; then echo 'Yarn のインストールに失敗しました' exit 1 fi echo "すべてのインストールが完了しました。" cd wget -O mecab-0.996.tar.gz "https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE" wget -O mecab-ipadic-2.7.0-20070801.tar.gz "https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM" wget -O mecab-ruby-0.996.tar.gz "https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7VUNlczBWVDZJbE0" wget https://raw.githubusercontent.com/shirasagi/shirasagi/stable/vendor/mecab/mecab-ipadic-2.7.0-20070801.patch cd tar xvzf mecab-0.996.tar.gz cd mecab-0.996 ./configure --enable-utf8-only make sudo make install #cd #sudo mv mecab-0.996 /usr/local/src cd tar xvzf mecab-ipadic-2.7.0-20070801.tar.gz cd mecab-ipadic-2.7.0-20070801 patch -p1 <../mecab-ipadic-2.7.0-20070801.patch ./configure --with-charset=UTF-8 make sudo make install #cd #sudo mv mecab-ipadic-2.7.0-20070801 /usr/local/src cd tar xvzf mecab-ruby-0.996.tar.gz cd mecab-ruby-0.996 ruby extconf.rb make make install #cd #sudo mv mecab-ruby-0.996 /usr/local/src echo "/usr/local/lib" | sudo tee -a /etc/ld.so.conf sudo ldconfig #### Voice cd wget http://downloads.sourceforge.net/hts-engine/hts_engine_API-1.08.tar.gz \ wget http://downloads.sourceforge.net/hts-engine/hts_engine_API-1.08.tar.gz \ http://downloads.sourceforge.net/open-jtalk/open_jtalk-1.07.tar.gz \ http://downloads.sourceforge.net/lame/lame-3.99.5.tar.gz \ http://downloads.sourceforge.net/sox/sox-14.4.1.tar.gz cd tar xvzf hts_engine_API-1.08.tar.gz cd hts_engine_API-1.08 ./configure make sudo make install #cd #sudo mv hts_engine_API-1.08 /usr/local/src cd tar xvzf open_jtalk-1.07.tar.gz cd open_jtalk-1.07 sed -i "s/#define MAXBUFLEN 1024/#define MAXBUFLEN 10240/" bin/open_jtalk.c sed -i "s/0x00D0 SPACE/0x000D SPACE/" mecab-naist-jdic/char.def ./configure --with-charset=UTF-8 make sudo make install #cd #sudo mv open_jtalk-1.07 /usr/local/src cd tar xvzf lame-3.99.5.tar.gz cd lame-3.99.5 ./configure make sudo make install #cd #sudo mv lame-3.99.5 /usr/local/src cd tar xvzf sox-14.4.1.tar.gz cd sox-14.4.1 ./configure make sudo make install #cd #sudo mv sox-14.4.1 /usr/local/src sudo ldconfig echo "Creating /var/www directory..." sudo mkdir -p /var/www if [ $? -ne 0 ]; then echo "Failed to create /var/www directory." exit 1 fi # Shirasagi のインストール cd git clone -b stable https://github.com/shirasagi/shirasagi if [ $? -ne 0 ]; then echo "Shirasagi のクローンに失敗しました。" exit 1 fi # クローンした shirasagi ディレクトリを移動 echo "Moving shirasagi directory to $SS_DIR..." sudo mv shirasagi "$SS_DIR" if [ $? -ne 0 ]; then echo "Failed to move shirasagi directory to $SS_DIR." exit 1 fi # Shirasagi の設定ファイルをコピー echo "Changing directory to /var/www/shirasagi..." cd $SS_DIR if [ $? -ne 0 ]; then echo "ディレクトリの移動に失敗しました。スクリプトを終了します。" exit 1 fi # Gemfile の存在を確認 if [ ! -f "Gemfile" ]; then echo "Gemfile が見つかりません。スクリプトを終了します。" exit 1 fi cp -n config/samples/*.{rb,yml} config/ if [ $? -ne 0 ]; then echo "設定ファイルのコピーに失敗しました。" exit 1 fi export SS_HOSTNAME=${1:-"example.jp"} export SS_USER=${2:-"$USER"} export SS_DIR=/var/www/shirasagi export PORT_COMPA=8001 export PORT_CHILD=8002 export PORT_OPEND=8003 export PORT_LPSPL=8004 if ! check_asdf_installed; then echo "asdf コマンドが利用できません。シェルの設定をリロードして再度確認します。" # シェルの設定ファイルをリロード exec bash -lc "source /etc/profile.d/asdf.sh && echo '再度確認: $(command -v asdf)'" fi # 絶対パスで bundle install を実行(リトライ付き) for i in $(seq 1 5); do # Bundler を使って依存関係をインストール $(asdf which bundle) install if [ $? -eq 0 ]; then echo "Bundle install succeeded" break else echo "Attempt $i: Bundle install failed, retrying..." sleep 5s fi if [ $i -eq 5 ]; then echo "Bundle install が5回失敗しました。スクリプトを終了します。" exit 1 fi done echo "セットアップが完了しました。" # asdf reshim を実行 echo "asdf reshim を実行しています..." asdf reshim # 結果の確認 if [ $? -eq 0 ]; then echo "asdf reshim の実行が成功しました。" else echo "エラー: asdf reshim の実行に失敗しました。" exit 1 fi # change secret # 資格情報の編集 echo "Editing Rails credentials using cat <config/recommend.yml sudo systemctl enable firewalld.service --now sudo firewall-cmd --add-port=http/tcp --permanent #sudo firewall-cmd --add-port=https/tcp --permanent #sudo firewall-cmd --add-port=3000/tcp --permanent sudo firewall-cmd --add-port=${PORT_COMPA}/tcp --permanent sudo firewall-cmd --add-port=${PORT_CHILD}/tcp --permanent sudo firewall-cmd --add-port=${PORT_OPEND}/tcp --permanent sudo firewall-cmd --add-port=${PORT_LPSPL}/tcp --permanent sudo firewall-cmd --reload #### Furigana #### Nginx cat </dev/null; then echo 'db.ss_sites.update({}, { $set: { map_api: "openlayers" } }, { multi: true });' | mongosh ss >/dev/null else echo "Error: MongoDB is not installed or not available in the PATH" exit 1 fi cat </dev/null 0 * * * * /bin/bash -l -c 'cd ${SS_DIR}; /usr/bin/flock -x -w 10 ${SS_DIR}/tmp/cms_generate_pages_lock bundle exec rake cms:generate_pages' >/dev/null EOF # modify ImageMagick policy to work with simple captcha # see: https://github.com/diaspora/diaspora/issues/6828 cd /etc/ImageMagick-6 && cat < - + + + EOF cat <