タグ: Ubuntu Page 5 of 14

NextcloudのExternal StorageサービスでのArray to string conversionエラーに対処。

エラー概要

Nextcloud 28.x以降にバージョンアップしてから、ログで以下が大量に出力され続けていました。

Array to string conversion at /var/www/html/nextcloud/lib/private/Files/Cache/Scanner.php#224

こちらの対処を行います。

エラーが出る要件

  1. Nextcloud 28.x以降を利用している。
  2. External Storageプラグインを利用している。
  3. このプラグインで、S3(乃至はS3互換のオンラインストレージ)をマウントしている。
  4. マウントしたストレージにファイルやフォルダを保存した。

詳細:Nextcloud Hub 8, copying files to an External Storage configured as primary storage isn't reliable

環境

  • Ubuntu 20.04
  • Nextcloud 29.0.0
  • PHP 8.1
  • Apache 2.4
  • オンラインストレージサービスとしてwasabiを利用

解決策

上記issueに

Pretty sure this would be fixed by #43794. At least in my limited testing using the merge request as a patch: https://patch-diff.githubusercontent.com/raw/nextcloud/server/pull/43794.diff

とあったので、この通りに実施します。

さっくりとした手順

  1. rootに昇格します。
  2. パッチファイルを入手します。
  3. ファイルを適用します。
  4. Apacheを再起動します。

root昇格

sudo su -

Nextcloudはwww-dataユーザーのみアクセス可能と、厳しめのアクセス権が設定されているので、ここで昇格させます。

ディレクトリ移動

  • Nextcloudのルートディレクトリに移動
cd /var/www/html/nextcloud && pwd

自分の環境に合わせます。

cd lib/private/Files/Cache

ファイルバックアップ

  • Scanner.phpファイルのバックアップ
cp -pi Scanner.php /path/to/backup/directory/Scanner.php.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。

  • バックアップ確認
diff -u Scanner.php /path/to/backup/directory/Scanner.php.$(date +%Y%m%d)

差分がなければバックアップは成功です。

パッチ適用

  • wgetでパッチ入手
sudo -u www-data https://patch-diff.githubusercontent.com/raw/nextcloud/server/pull/43794.diff
  • パッチ適用
sudo -u www-data patch < 43794.diff 

patching file Scanner.phpと返ってくればOKです。

パッチ適用確認

  • 差分確認
diff -u /path/to/backup/directory/Scanner.php.$(date +%Y%m%d) Scanner.php
  • 差分結果
                                                }

                                                // Only update metadata that has changed
-                                               $newData = array_diff_assoc($data, $cacheData->getData());
-
+                                               // i.e. get all the values in $data that are not present in the cache already
+                                               // NOTE: we serialize then unserialize here because array_diff_assoc() doesn't 
+                                               // support multidimensional arrays on its own (and otherwise internally casts any 
+                                               // embedded array elements to attempt to compare them - not only generating warnings 
+                                               // like "Array to string conversion" but also, as a resut, overlooking real differences)
+                                               $newData = array_diff_assoc(
+                                                       array_map('serialize', $data), 
+                                                       array_map('serialize', $cacheData->getData())
+                                                       );
+                                               $newData = array_map('unserialize', $newData);
+                                        
                                                // make it known to the caller that etag has been changed and needs propagation
                                                if (isset($newData['etag'])) {
                                                        $data['etag_changed'] = true;
  • Apache再起動
systemctl restart apache2.service

既にrootに昇格しているので、sudoは不要のはずです。

  • パッチファイルを削除
rm 43794.diff 

エラー解消確認

  1. ブラウザでNextcloudサイトに管理者権限でログインします。
  2. 管理メニュー→ログへと進み、適用時刻以降に冒頭のログが出力されていないことを確認します。

Ubuntu 22.04にmkcertをインストール。

これを使わずとも、Ubuntu 22.04にはapt(aptitude)からインストール可能でした。

概要

  • ローカルDNSで証明書を作りたい
  • 或いはローカルホスト(127.0.0.1)をhttps化したい

場合に役立つコマンド、mkcertをインストールします。

インストール方法

aptitude (apt)によるインストール

sudo aptitude install mkcert

ローカルルート証明書を作成

  • ルート証明書の作成
mkcert -install
  • ローカルのルート証明書作成確認
ls -l ~/.local/share/mkcert/
  • rootCA-key.pem → 秘密鍵
  • rootCA.pem → ルート証明書

ホスト名に追記・修正

ファイル /etc/hosts をルート顕現で、以下のように修正します。

127.0.0.1  agnes-luce

※ Ubuntu系はホスト名に指定したIPがなぜか127.0.1.1になっています。

証明書作成

  • ディレクトリ移動
cd /hoge && pwd

任意のディレクトリに移動します。

  • 証明書作成
mkcert -key-file ドメイン名.key.$(date +%Y%m) -cert-file ドメイン名.crt.$(date +%Y%m) ドメイン名
  • 作成例
mkcert -key-file agnes-luce.key.$(date +%Y%m) -cert-file agnes-luce.crt.$(date +%Y%m) agnes-luce
Created a new certificate valid for the following names 📜
 - "agnes-luce"

The certificate is at "agnes-luce.crt.202404" and the key at "agnes-luce.key.202404" ✅

It will expire on 14 July 2026 🗓

証明書の整合性を確認

  • 証明書から公開鍵のハッシュ値を取り出す
openssl x509 -pubkey -in 証明書ファイル -noout | openssl md5
  • 秘密鍵から公開鍵のハッシュ値を取り出す
openssl pkey -pubout -in 秘密鍵ファイル | openssl md5

それぞれのハッシュ値が同じであることを確認します。

こうしてできた一式は2年半有効です。

書き直し:Ubuntu 22.04系にRedmine5.1をインストール。(手順書の基準)

こちらの記事を、現在の自分の手順書の基準に直しました。

心がけている基準

  • 1区切りで1コマンド。
    • コピペする際に連続で実行する際のエラーを防ぎます。
    • 特に、SQLを操作する際は1行ずつ、確実に行いたいのでこれで書き直しです。
  • 可能な限りテキストエディタは用いない。
    • 設定ファイルの書き換えや追記はsedやteeを使います。
    • 使用する必要がある場合はその旨を追記します。

こうしてできたのがこちら。

前提

  • Ubuntuサーバの初期設定が終わった直後の状態を想定します。
  • DNSでドメインの名前が解決できることを前提としています
  • 環境は以下の通りです。
  • Apache系
  • MySQL
  • Ruby 3.0
  • また、パッケージ管理としてaptitudeを用いています。aptが好みの方はこちらに読み替えてください。

特記事項

  • 本手順ではRedmine 5.1をインストールします。
  • よほどのことがない限り、Ubuntu22.04にインストールするのはこのバージョンになります。
  • 本記事のredmineの格納ディレクトリは/home/www-data/redmineです。一般的なディレクトリ(/var/lib/redmine)と異なることを最初に注記します。
  • ほぼコピペだけで済むような構成にしていますが、一部、テキストエディタを使用する箇所があります。
  • また、自身の環境に合わせたりパスワードを設定する項目がありますのでそこは注意してください。

手順

Apacheのレポジトリを追加します。

sudo add-apt-repository ppa:ondrej/apache2

必要なパッケージをインストールします。

  • パッケージ全体のアップデート
sudo aptitude update
  • 必要なパッケージのインストール
sudo aptitude install build-essential zlib1g-dev libssl-dev libreadline-dev libyaml-dev libcurl4-openssl-dev libffi-dev mysql-server mysql-client apache2 apache2-dev libapr1-dev libaprutil1-dev imagemagick libmagick++-dev fonts-takao-pgothic subversion git ruby libruby ruby-dev libmysqlclient-dev

apacheの追加モジュールをインストールします。

sudo aptitude install libapache2-mod-passenger

apacheのバージョンを確認します。

apache2ctl -v

Apache/2.4.59以降であることを確認します。2.4.58には、http/2プロトコルへの脆弱性があるので、左記のバージョンであることを確認します。

rubyのパッケージ管理(gem)を用いて必要なライブラリをインストールします。

sudo gem install bundler racc mysql2

「3 gems installed」が表示されればインストール成功です。

必要に応じてmysqlの初期設定を行います。

mysql_secure_installationによる初期設定を行います。

うまくいかない場合は以下を参照してください。

https://barrel.reisalin.com/books/bbf94/page/mysql-secure-installation

mysqlでDBとユーザーを設定します。

sudo mysql -u root -p

上記で設定した「mysqlのrootパスワード」を入力し、mysqlにログインします

CREATE DATABASE redmine character set utf8mb4;

DB "redmine" を作成します

CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'password';

ユーザ "redmine"を作成し、パスワードを設定します。
この'password'は任意のパスワードに変更してください

GRANT ALL ON redmine.* TO 'redmine'@'localhost';
flush privileges;
exit

設定したDBでログインできることを確認します。

mysql -u redmine -p
SHOW DATABASES;
exit
  • 配置ディレクトリ作成
sudo mkdir -p /home/www-data/redmine

自分の環境に合わせます。

  • 所有者変更
sudo chown -R www-data:www-data /home/www-data
  • Redmine 5.1を入手
sudo -u www-data svn co https://svn.redmine.org/redmine/branches/5.1-stable /home/www-data/redmine

Redmineのコンフィグを設定します。

  • サンプルファイルをコピーしてコンフィグを編集
sudo cp -pi /home/www-data/redmine/config/database.yml.example /home/www-data/redmine/config/database.yml

/home/www-data/redmine/config/database.yml

このファイルを教義・信仰に従ったエディタで編集してください。

database.yml 編集内容(要:テキストエディタ)

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  # rootからredmineに変更します
  password: "redmine用のパスワード"
  encoding: utf8mb4
# 本番環境(production)のみ設定を行います

Redmineのマイグレーションを行います。

  • Redmineのルートディレクトリに移動
cd /home/www-data/redmine/ && pwd

/home/www-data/redmine/ (Redmineを配置したディレクトリ)であることを確認します

  • bundle install
sudo -u www-data bundle install --without development test --path vendor/bundle
  • シークレットトークンの発行
sudo -u www-data bundle exec rake generate_secret_token
  • DBマイグレーション
sudo -u www-data RAILS_ENV=production bundle exec rake db:migrate
  • 日本語化
sudo -u www-data RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data

Apacheの設定ファイルを作成します。

【】を自分の作成したRedmineのサーバ名/ドメイン名に変更します。

cat <<- __EOF__ | sudo tee -a /etc/apache2/sites-available/redmine.conf
<VirtualHost *:80>
    ServerName 【hoge.example.com】
    # ServerNameは自身が設定したredmineに読み替えてください。
    DocumentRoot /home/www-data/redmine/public
    <Directory /home/www-data/redmine/public>
        Options -MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
__EOF__

設定を反映させます。

  • ファイル作成確認
ls -l /etc/apache2/sites-available/redmine.conf
  • 設定ファイル有効化
sudo a2ensite redmine.conf
  • 初期サイト設定を無効化
sudo a2dissite 000-default.conf
sudo a2dissite default-ssl.conf
  • コンフィグファイル整合性確認
sudo apache2ctl configtest

Syntax OK を確認します

  • 設定反映前のapacheステータス確認
systemctl status apache2.service

active(running)を確認します

  • apache再起動
sudo systemctl restart apache2.service
  • 設定反映後のapacheステータス確認
systemctl status apache2.service

active(running)を確認します

Webページの表示を確認します。

http://設定したRedmineドメイン

でRedmineのトップページが表示されれば成功です。

直ちにadmin/adminでログインし、強固なパスワードを設定し直します。

Ubuntu 20.04 / 22.04で稼働しているApache HTTP Server 2.4の脆弱性対応。

2024年4月に発表された脆弱性への対処を行います。

脆弱性内容

  • Apache HTTP Serverのコア機能におけるHTTPレスポンス分割の問題(CVE-2023-38709)
  • 複数のモジュールにおけるHTTPレスポンス分割の問題(CVE-2024-24795)
  • HTTP/2 CONTINUATIONフレームの検証不備に起因したメモリ枯渇の問題(CVE-2024-27316)

https://jvn.jp/vu/JVNVU99032532

環境

  • Ubuntu 20.04 および Ubuntu 22.04
  • Apache 2.4系を利用

Apacheのレポジトリを追加します。

sudo add-apt-repository ppa:ondrej/apache2

Apacheのバージョンアップを行います。

  • パッケージ全体のアップデート
sudo aptitude update
  • パッケージのアップグレード
sudo aptitude upgrade

このリストの中にapache2とapache2関連パッケージが更新される(2024/04/10現在)ため、それぞれアップグレードを行います。

バージョンアップを確認します。

apache2ctl -v

Apache/2.4.59以降であることを確認します。2.4.58には、http/2プロトコルへの脆弱性があるので、左記のバージョンであることを確認します。

対応を行った日付

2024/04/10

ソースコードからインストールしたOpenSSHを9.6.1p→9.7.1にアップデート(Ubuntu 20.04)

この記事の続きです。

概要

ソースコードからインストールしたOpenSSH9.6p1を、更にOpenSSH9.7p1にバージョンアップします。

前提

Ubuntu 20.04での動作確認です。

上記手順を用いて、ソースコードからOpenSSHをインストールしています。

さっくりとした手順

  1. 作業用ディレクトリに移動します。
  2. ソースをダウンロードします。
  3. OpenSSHをソースからビルドします。
  4. バージョンアップを確認します。

バージョンアップ前の確認

ssh -V
OpenSSH_9.6p1, OpenSSL 3.2.1 30 Jan 2024

作業用ディレクトリ移動

cd /hoge && pwd

任意のディレクトリを指定します。

ソースのダウンロードと展開

  • ソース取得
wget -c http://mirror.exonetric.net/pub/OpenBSD/OpenSSH/portable/openssh-9.7p1.tar.gz

2024/04/04現在の最新版を指定しています。

  • ソース展開
tar -xzf openssh-9.7p1.tar.gz
  • ディレクトリ移動
cd openssh-9.7p1

コンフィグ

  • OpenSSLの位置を確認
which openssl
  • 結果確認
/usr/local/ssl/bin/openssl

筆者の環境です。

  • コンフィグ
./configure --with-kerberos5 --with-md5-passwords --with-pam --with-selinux --with-privsep-path=/var/lib/sshd/ --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/ssl

--with-ssl-dir=/usr/local/sslは、opensslのヘッドディレクトリを指定します。

  • make
make
  • インストール
sudo make install

バージョンアップ確認

※別にターミナルを開いて確認します。

  • バージョン確認
ssh -V
OpenSSH_9.7p1, OpenSSL 3.2.1 30 Jan 2024

バージョンアップされていることを確認します。

  • SSHサービス再起動
sudo systemctl restart ssh.service
  • サービス再起動確認
sudo systemctl status ssh.service

active(running)を確認します

必要に応じてサーバの再起動を行ってください。

ソースコードからインストールしたOpenSSL 3.1.1を3.2.1にアップグレード。

こちらの記事から、OpenSSLのバージョンが上がっていたので対応します。

概要

脆弱性やバグフィックス版のOpenSSL3.2.1にアップグレードします。

環境、前提

  • Ubuntu 20.04
  • ソースコードからOpenSSL3.1.1をインストール・設定済み

さっくりとした手順

  1. rootに昇格します。
  2. 作業用ディレクトリにソースコードを取得・展開します。
  3. ソースからインストール(アップグレード)を行います。
  4. バージョンアップを確認します。

作業前にバージョン確認

openssl version -a

OpenSSL 3.1.1 30 May 2023 (Library: OpenSSL 3.1.1 30 May 2023)
built on: Thu Jun 22 05:19:59 2023 UTC
platform: linux-x86_64
options: bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DZLIB -DNDEBUG
OPENSSLDIR: "/usr/local/ssl"
ENGINESDIR: "/usr/local/ssl/lib64/engines-3"
MODULESDIR: "/usr/local/ssl/lib64/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0xfffa3203578bffff:0x7a9

rootに昇格

この手の作業はrootで行った方が手間が少ないです。その分、注意を払いましょう。

sudo su -

作業用ディレクトリに移動

cd /hoge && pwd

任意のディレクトリを指定します。

ソースコードの取得

  • git clone
git clone https://github.com/openssl/openssl -b openssl-3.2.1

2024/04/02時点での最新安定版を指定します

  • ソースコードのディレクトリに移動
cd openssl

ソースからアップグレード(インストール)

  • コンフィグ設定
./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib
  • make
make

makeは時間がかかります。状況を時折確認しながら待ちましょう。

  • 整合性確認
make test

同様にmake testも時間がかかります。

  • アップグレード(インストール)
make install

アップグレード後のバージョン確認

  • SSLのバージョンアップ確認
openssl version -a

OpenSSL 3.2.1 30 Jan 2024 (Library: OpenSSL 3.2.1 30 Jan 2024)
built on: Tue Apr 2 01:28:56 2024 UTC
platform: linux-x86_64
options: bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DZLIB -DNDEBUG
OPENSSLDIR: "/usr/local/ssl"
ENGINESDIR: "/usr/local/ssl/lib64/engines-3"
MODULESDIR: "/usr/local/ssl/lib64/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0xfffa3203578bffff:0x7a9

バージョンが上がっていることを確認します。

必要に応じてサーバの再起動を行い、作業完了です。

Ubuntu 22.04にclamavを設定。(インストールと動作確認)

Ubuntu 22.04の検証機が、16GBほどの余裕があったのでclamavをインストールしてみます。

さっくりとした手順

  1. レポジトリを追加します。
  2. clamavをインストールします。
  3. 定義ファイルをアップデートします。
  4. 動作を確認します。

手順

レポジトリを追加します。

sudo add-apt-repository ppa:deadsnakes/ppa

clamavのインストールを行います。

  • パッケージ更新
sudo aptitude update
  • clamavインストール
sudo aptitude install clamav clamav-daemon
  • インストール確認
clamd --version

2024/02/20現在、以下を確認しました。

ClamAV 0.103.11/27190/Mon Feb 19 18:24:27 2024

定義ファイルの更新を行います。

  • freshclam 起動(失敗)
sudo freshclam 

以下のエラーが出ました。

ERROR: /var/log/clamav/freshclam.log is locked by another process
ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log).
ERROR: initialize: libfreshclam init failed.
  • エラー対処
sudo rm /var/log/clamav/freshclam.log
  • エラー対処後のfreshclam 起動(OK)
sudo freshclam

定義ファイル更新確認

Tue Feb 20 15:35:41 2024 -> ClamAV update process started at Tue Feb 20 15:35:41 2024
Tue Feb 20 15:35:41 2024 -> daily.cvd database is up-to-date (version: 27190, sigs: 2053641, f-level: 90, builder: raynman)
Tue Feb 20 15:35:41 2024 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr)
Tue Feb 20 15:35:41 2024 -> bytecode.cvd database is up-to-date (version: 334, sigs: 91, f-level: 90, builder: anvilleg)

インストール後のステータスを確認します。

systemctl status clamav-daemon
systemctl status clamav-freshclam

それぞれactive(running)を確認します

テストファイルを用いて動作を確認します。

  • ディレクトリ移動
cd /hoge && pwd

任意のディレクトリを指定してください。

  • eicarテストファイル作成
echo "X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*" > eicar
  • ディレクトリスキャン
clamscan ./

以下を確認したら、スキャンはできています。

/hoge/eicar: Eicar-Signature FOUND

----------- SCAN SUMMARY -----------
Known viruses: 8685351
Engine version: 0.103.11
Scanned directories: 1
Scanned files: 1
Infected files: 1
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 16.689 sec (0 m 16 s)
Start Date: 2024:02:20 16:12:15
End Date:   2024:02:20 16:12:32

これから

  1. 設定ファイルを編集
  2. ファイル追加時などにスキャンをするようにする

などを行っていきます。

BookStackをnginxで動かす場合の設定。

デスクトップPCとしてのLinux利用(Kubuntu 22.04インストール後にやったこと) – Manualmaton's Laboratory

こちら、ローカルサーバとして運用することにしています。

公開しているサイトと異なりnginxで動かしているので、その場合のメモです。

環境

  • Ubuntu 22.04
  • 適切に名前解決できる
  • ドメイン名に沿った証明書がある
    • 筆者はmkcertでローカル証明書を作っています

インストールして最初の設定が終わっている状態です。

nginxインストール

sudo aptitude install nginx

mysqlインストール

sudo aptitude install mysql-server mysql-client libmysqlclient-dev

sql設定変更

sudo cp -pi /etc/mysql/mysql.conf.d/mysqld.cnf /path/to/backup/mysqld.cnf.$(date +%Y%m%d)
# 任意のバックアップディレクトリを指定します。
# .$(date +%Y%m%d)をつけることで、バックアップファイルは当日日付(YYYYMMDD形式)で記録されます

diff -u /etc/mysql/mysql.conf.d/mysqld.cnf /path/to/backup/mysqld.cnf.$(date +%Y%m%d)
# バックアップが取れていることを「差分が存在しないこと」で確認します

echo -e "default_authentication_plugin=mysql_native_password" | sudo tee -a /etc/mysql/mysql.conf.d/mysqld.cnf
# mysqld.cnfに追記をします

MySQL再起動

sudo systemctl restart mysql.service

MySQLのrootパスワード変更

sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
flush privileges;
exit

運用に合わせて適切なパスワードを設定します。

mysql-secure-installation

sudo mysql_secure_installation

詳しい設定は以下に記しています。

https://atelier.reisalin.com/projects/zettel/questions/5-mysql_secure_installation

phpのインストール

https://barrel.reisalin.com/books/nextcloud/page/1-1-nextcloud

自サイトを参考にしていますが、一部異なります。

PHPレポジトリを追加して必要パッケージをインストールします。

  • レポジトリ追加
sudo add-apt-repository ppa:ondrej/php

Ubuntu20.04系ではこれを行わないとPHP7.4系しかインストールされません。

  • パッケージアップデート
sudo aptitude update
  • php インストール
sudo aptitude install php8.1
sudo aptitude install php8.1-{opcache,pdo,bcmath,calendar,ctype,fileinfo,ftp,gd,intl,json,ldap,mbstring,mysql,posix,readline,sockets,bz2,tokenizer,zip,curl,iconv,phar,xml,dev,fpm}
#fpmを入れる必要あり

nginx環境でも動かすため、php(バージョン)-.fpmを入れます。

  • apache無効化
sudo disable apache2.service

依存関係でapache2も一緒にインストールされるので、ここで停止させます。

Composerインストール

https://barrel.reisalin.com/books/bookstack/page/bookstackubuntu2004

同じくこちらにメモを残しています。

  • インストール
  • ディレクトリ移動
cd /hoge

任意の作業ディレクトリに移動します

  • インストーラーのダウンロード
sudo php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
  • インストール
sudo php composer-setup.php
  • インストーラーのリンク解除
sudo php -r "unlink('composer-setup.php');"
  • コマンドのパスを移動
sudo mv composer.phar /usr/local/bin/composer
  • composerに実行権を付与
sudo chmod +x /usr/local/bin/composer
  • バージョン確認
composer --version

バージョンが表示されることを確認します。

DBを作成します。

  • mysqlログイン
mysql -u root -p
CREATE DATABASE bookstack character set utf8mb4;
CREATE USER 'bookstackuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON bookstack.* TO 'bookstackuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

DB名/パスワードはポリシーに応じて適切なものを指定します。

BookStackの配置

  • プログラム配置
cd /home/www-data
# パーティションの都合上、/home/www-dataに置いています。
# 環境に合わせて適切なWebサービス公開ディレクトリを指定してください。

sudo git clone https://github.com/BookStackApp/BookStack.git --branch release --single-branch 
sudo chown -R www-data:www-data BookStack
cd BookStack
  • 設定ファイル編集
sudo cp -pi .env.example .env

教義・信仰に沿ったエディタで以下を編集します。

APP_URL=https://hoge.example.com
# 公開用URLを指定します

# Database details
DB_HOST=localhost
DB_DATABASE=bookstack
DB_USERNAME=bookstackuser
DB_PASSWORD=password
# DB名、パスワードなどは先ほど作成したものです。
  • マイグレート
sudo -u www-data composer install --no-dev --optimize-autoloader
sudo -u www-data php artisan key:generate
sudo -u www-data php artisan db:seed --force
sudo -u www-data php artisan migrate --force

Nginx設定

  • 設定ファイル作成
    • /etc/nginx/site-available/bookstack.conf
  • ファイル内容
server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    # サーバ名を指定します。
    server_name  hoge.example.com;
        server_tokens off;
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets off;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
        ssl_prefer_server_ciphers off;
        add_header Strict-Transport-Security 'max-age=63072000';

    # 任意のログディレクトリを指定します。
    access_log  /var/log/nginx/bookstack/access.log;
    error_log   /var/log/nginx/bookstack/error.log;
    # SSL証明書を指定します。
    ssl_certificate      /path/to/ssl_certificate/hoge.crt;
    # SSL秘密鍵を指定します。
    ssl_certificate_key  /path/to/ssl_key/hoge.key;

    # BookStackが置かれているディレクトリです。/publicは必ず指定します。
    root /home/www-data/BookStack/public;
    index index.php index.html;

    location / {
      try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $fastcgi_path_info;
      fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    }
}

# 強制的にhttps通信
server {
    listen       80;
    listen       [::]:80;
    server_name  veritas.lumos;
    return 301   https://$host$request_uri;
}

nginx設定を有効化します。

  • ディレクトリ移動
cd /etc/nginx/sites-enabled
  • 初期設定ファイルを無効
sudo unlink default
  • 設定有効化
sudo ln -sf /etc/nginx/site-available/bookstack.conf bookstack.conf
  • 構文チェック
sudo nginx -t

エラーがないことを確認します。

  • nginx再起動
sudo systemctl restart nginx.service

インストール確認

設定したドメインにブラウザでアクセスし、ログイン画面が出てくれば成功です。

Ubuntu : ディレクトリのバックアップスクリプト。

概要

Linux運用時、特定のディレクトリをバックアップするスクリプトです。

  1. バックアップ元とバックアップ先の変数指定
  2. 世代管理
  3. 直接実行するかCronで設定するか

の変数指定が可能です。

スクリプト内容

  • home_backup.sh

※要管理者権限

# 変数の定義
BACKUP_SOURCE="/home"
BACKUP_DEST="/backup"
GENERATION=3
VERBOSE=false  # バックアップ成功メッセージを表示するかどうか(true/false)

# 一時ディレクトリを作成
temp_dir=$(mktemp -d)

# バックアップを作成する関数
create_backup() {
    # yyymmdd形式の日付を取得
    DATE=$(date +"%Y%m%d")

    # 圧縮ファイルの名前を指定
    ARCHIVE_NAME="backup_$DATE.tar.gz"

    # rsyncを用いてディレクトリを一時ディレクトリにコピー
    rsync -a --delete "$BACKUP_SOURCE/" "$temp_dir/"

    # ディレクトリ全体を圧縮
    tar --ignore-failed-read -czf "$BACKUP_DEST/$ARCHIVE_NAME" -C "$temp_dir" .

    # 古いバックアップを削除
    delete_old_backups

    # メッセージの表示
    if [ "$VERBOSE" = true ]; then
        echo "Backup completed successfully."
    fi
}

# 古いバックアップを削除する関数
delete_old_backups() {
    # バックアップディレクトリ内のバックアップファイルを日付順にソート
    sorted_backups=($(ls -t "$BACKUP_DEST" | grep -E "backup_[0-9]{8}\.tar\.gz"))

    # 不要なバックアップファイルを削除
    while [ ${#sorted_backups[@]} -gt $GENERATION ]; do
        file_to_delete="${sorted_backups[${#sorted_backups[@]}-1]}"
        rm "$BACKUP_DEST/$file_to_delete"
        echo "Deleted old backup: $file_to_delete"
        # 削除したファイルをリストから除外
        sorted_backups=("${sorted_backups[@]:0:${#sorted_backups[@]}-1}")
    done
}

# バックアップの作成
create_backup

# 一時ディレクトリを削除
rm -r "$temp_dir"

作成後、実行権を付与します。

sudo chmod +x home_backup.sh

注意点

  • バックアップ先に十分な空き容量があることを想定しています。
  • rsyncとtarの二重処理なので、割と時間がかかります。

この辺をもう少しうまく処理したいです。

Ubuntu 22.04系にRedmine5.1をインストール。

OSの刷新に備えて、Ubuntu 22.04に、2024年1月現在の最新版のRedmineを、Ubuntu22.04系にインストールします。

一部を除いてコピペだけで済むように完結しています。

本記事で実施すること

  1. Redmineを動かすためのパッケージがインストールできるように準備をします。
  2. Redmineを動かすためのパッケージ(Ruby/データベース/Webサービスなど)をインストールします。
  3. データベースやWebサービスの基礎設定を行います。
  4. Redmineの動作確認を行います。

想定している読者

  • 「Redmine」をUbuntuにインストールしてみたい
  • まずは動くところまで確認できればいい

前提

  • Ubuntuサーバの初期設定が終わった直後の状態を想定します。
  • DNSでドメインの名前が解決できることを前提としています
  • 環境は以下の通りです。
  • Apache系
  • MySQL
  • Ruby 3.0
  • また、パッケージ管理としてaptitudeを用いています。aptが好みの方はこちらに読み替えてください。

特記事項

  • 本手順ではRedmine 5.1をインストールします。
  • 本記事のredmineの格納ディレクトリは/home/www-data/redmineです。一般的なディレクトリ(/var/lib/redmine)と異なることを最初に注記します。

手順

Apacheのレポジトリを追加します。

sudo add-apt-repository ppa:ondrej/apache2

必要なパッケージをインストールします。

sudo aptitude update

sudo aptitude install build-essential zlib1g-dev libssl-dev libreadline-dev libyaml-dev libcurl4-openssl-dev libffi-dev mysql-server mysql-client apache2 apache2-dev libapr1-dev libaprutil1-dev imagemagick libmagick++-dev fonts-takao-pgothic subversion git ruby libruby ruby-dev libmysqlclient-dev

apacheの追加モジュールをインストールします。

sudo aptitude install libapache2-mod-passenger

rubyのパッケージ管理(gem)を用いて必要なライブラリをインストールします。

sudo gem install bundler racc mysql2
# 「3 gems installed」が表示されればインストール成功です。

必要に応じてmysqlの初期設定を行います。

mysql_secure_installationによる初期設定を行います。

うまくいかない場合は以下を参照してください。

https://atelier.reisalin.com/projects/zettel/questions/5-mysql_secure_installation

mysqlでDBとユーザーを設定します。

mysql -u root -p
# 上記で設定した「mysqlのrootパスワード」を入力し、mysqlにログインします
CREATE DATABASE redmine character set utf8mb4;
/* DB "redmine" を作成します */

CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'password';
/* ユーザ "redmine"を作成し、パスワードを設定します*/
/* この'password'は任意のパスワードに変更してください*/

GRANT ALL ON redmine.* TO 'redmine'@'localhost';
/* DB "redmine"の権限をユーザ "redmine"に委譲します*/

flush privileges;
/* 設定を反映させます*/

exit

設定したDBでログインできることを確認します。

mysql -u redmine -p
SHOW DATABASES;
/* DB:redmineがあることを確認します。 */

exit

Redmineプログラムを配置します。

sudo mkdir -p /home/www-data/redmine

sudo chown -R www-data:www-data /home/www-data

sudo -u www-data svn co https://svn.redmine.org/redmine/branches/5.1-stable /home/www-data/redmine

Redmineのコンフィグを設定します。

sudo cp -pi /home/www-data/redmine/config/database.yml.example /home/www-data/redmine/config/database.yml
  • /home/www-data/redmine/config/database.yml

上記を教義・信仰に従ったエディタで編集してください。

database.yml 編集内容

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  # rootからredmineに変更します
  password: "redmine用のパスワード"
  encoding: utf8mb4
# 本番環境(production)のみ設定を行います

Redmineのマイグレーションを行います。

cd /home/www-data/redmine/ && pwd
# /home/www-data/redmine/ (Redmineを配置したディレクトリ)であることを確認します

sudo -u www-data bundle install --without development test --path vendor/bundle

sudo -u www-data bundle exec rake generate_secret_token

sudo -u www-data RAILS_ENV=production bundle exec rake db:migrate

sudo -u www-data RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data

Apacheの設定ファイルを作成します。

cat <<- __EOF__ | sudo tee -a /etc/apache2/sites-available/redmine.conf
<VirtualHost *:80>
    ServerName hoge.example.com
    # ServerNameは自身が設定したredmineに読み替えてください。
    DocumentRoot /home/www-data/redmine/public
    <Directory /home/www-data/redmine/public>
        Options -MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
__EOF__

設定を反映させます。

ls -l /etc/apache2/sites-available/redmine.conf
# ファイルがあることを確認します。

sudo a2ensite redmine.conf
# 設定ファイルを有効化します

sudo a2dissite 000-default.conf
sudo a2dissite default-ssl.conf
# 初期サイト設定を無効化します

sudo apache2ctl configtest
# Syntax OK を確認します

sudo systemctl restart apache2.service

systemctl status apache2.service

Webページの表示を確認します。

http://設定したRedmineドメイン

でRedmineのトップページが表示されれば成功です。

直ちにadmin/adminでログインし、強固なパスワードを設定し直します。

Page 5 of 14

Powered by WordPress & Theme by Anders Norén