「ubuntu」タグアーカイブ

UBUNTU 22.04 redmine 5.0移行

前回、サクッとubuntu 20.04 to 22.04にdo-release-upgradeしたらredmineが無くなっていてがっかりして20.04に戻したのですが。。。コロナにかかって自宅待機になったことを機に(笑)、移行実施しました。

前提: gcp上で動いてるubuntu 20.04マシンをライブで22.04に上げます。

まずはsnapshotを取って、サクッと do-release-upgrade。基本元のコンフィグ残す方向で Nを選択。

終わったら不具合ないか確認。私の場合は何点かあった。

1.apache2が上がらない。/etc/apache2/mod-enabled/php7*が残ってたのが原因。

$ cd /etc/apache2/mod-enabled; sudo rm php7*
$ sudo a2enmod php8.1
$ sudo systemctl start apache2 で復旧

2.TeraTERMから繋がらなくなった。sshでssh-rsaが禁止されたのが原因。

https://blog.hitsujin.jp/entry/2022/04/24/010000

という訳で、putty-keygenでssh-ed25519でキーを作りなおした。

3.muninで一部値が取れなくなってる。。。これは急がないのでそのうち直す。

4.redmineが無くなった。これが今日の主題!

Redmine 5.0インストール

ないものは持ってきて入れるしかないので以下のBLOGを参考にRedmineをインストール。せっかくなので5.0で。

https://blog.redmine.jp/articles/5_0/install/ubuntu/

方針: データは20.04のパッケージredmineのデータを引き継ぐ。パッケージでもいいものはパッケージを利用する。

1.何はともあれバックアップ

$ mysqldump -u root -p redmine_default >redmine_default.sql
$ sudo tar cvfz /work/ubuntu2004redminebakup.tar.gz usr/share/redmine var/lib/redmine etc/redmine var/log/redmine var/cache/redmine

2.必要なパッケージインストール

DBは元々MySQLを使っていたので引き続きMySQLを使う(インストール済みの想定)。Rubyはパッケージの3.0.2を使う。Passengerもパッケージを利用。

$ sudo locale-gen ja_JP.UTF-8
$ sudo apt install -y build-essential zlib1g-dev libssl-dev libreadline-dev libyaml-dev libcurl4-openssl-dev libffi-dev
$ sudo apt install -y apache2 apache2-dev
$ sudo apt install -y imagemagick fonts-takao-pgothic
$ sudo apt install -y subversion git
$ sudo apt install -y passenger libapache2-mod-passenger

3.DB移行

ubuntu 20.04のパッケージredmineはredmine_defaultという名前のdatabeseになっているので、今回は、redmineという名前で作り直してデータをストアすることにした。

$ mysql -u root -p
mysql> CREATE DATABASE redmine CHARACTER SET utf8mb4;
mysql> CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'ぱすわーど';
mysql> GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';

$ mysql -u redmine -p redmine < redmine_default.sql

4.Redmineインストール

ubuntu20.04パッケージ版のredmineは /var/lib/redmine/defaultを使っているので、/var/lib/redmineをそのまま使う。

$ cd /var/lib/redmine
$ sudo -u www-data svn co https://svn.redmine.org/redmine/branches/5.0-stable /var/lib/redmine

パッケージの添付ファイルフォルダとpluginsフォルダをコピーしておく
$ sudo cp -rp default/files .
$ sudo cp -rp /usr/share/redmine/plugins .

コンフィグも流用して一部修正
$ cd config
$ sudo cp -p /etc/redmine/default/database.yml .
usernameがredmine/instanceになってるのでredmineに変更
databaseがredmine_defaultになってるのでredmineに変更
$ sudo cp -p  /etc/redmine/default/configuration.yml .
これは特に直すとこなし

$ cd /var/lib/redmine
rootでbundle実行していいのか?とも思うが。。。
$ sudo bundle install --without development test
$ sudo -u www-data bin/rake generate_secret_token
$ sudo -u www-data RAILS_ENV=production bin/rake db:migrate
$ sudo -u www-data RAILS_ENV=production bin/rake redmine:plugins:migrate
$ sudo -u www-data RAILS_ENV=production bin/rake tmp:cache:clear

5.apche2設定変更

/etc/apache2/conf-enabled/redmine.conf修正
Alias "/redmine" /var/lib/redmine/public
<Location /redmine>
        PassengerBaseURI /redmine
        PassengerAppRoot /var/lib/redmine
</Location>
<Directory "/var/lib/redmine/public">
        Allow from all
        Options -MultiViews
        Require all granted
</Directory>

apache再読み込み
$ sudo apachectl configtest
$ sudo systemctl reload apache2

これで、redmineが見られるようになったはず。

6.その他微調整

i. logrotate設定

/etc/logrotate.d/redmine
# Redmine logs:
/var/lib/redmine/log/*.log {  # ←ここ直す
  daily
  missingok
  rotate 14
  compress
  delaycompress
  notifempty
  copytruncate
}

ii. cron.d修正

/etc/cron.d/redmine修正 (redmineのパス修正)
30 6 * * * root cd /var/lib/redmine; bundle exec rake redmine:send_reminders days=3 RAILS_ENV=production > /dev/null 2>&1

iii. checklists pluginを入れていたのだが、うまく引き継がれなかったので、再度、インストールした。

7.ubuntu 20.04のパッケージredmineさようなら

動作確認が終わったら、古いredmineを消す。

$ sudo apt remove redmine redmine-sqlite
$ sudo rm -r /etc/redmine/default
$ sudo rm -r  /var/cache/redmine
$ sudo rm -r /var/log/redmine
$ sudo rm -r /usr/share/redmine
$ mysql -u root -p
mysql> drop database redmine_default;
mysql> drop user 'redmine/instance'@'localhost';

以上

p.s.

やらなくてもいいと言えばいいのですが。。。redmineパッケージを削除すると、apt upgradeするたびに、redmineパッケージインストール時に依存関係で一緒にインストールされたであろうrubyのサブモジュールパッケージが大量にもう使ってないよ。apt autoremoveで削除できるよと言ってくるんですよね。うざいのでautoremoveを実行したら見事に、redmine動かなくなりました(笑)

まぁ、再度

$ sudo bundle install –without development test

してやれば問題なく動きました。gemはパッケージでもbundleで入れても問題ないようですね。

Redmine checklists Pluginで日本語が使えない

Ubuntu 20.04のRedmineに入れたchecklistsプラグイン 3.1.20で日本語を入れてみたところInternal Server Errorが出てしまった。production.logを確認したところ以下の様なエラーが出ていた。

ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value: '\xE2\x91\xA0202...' for column 'subject' at row 1: INSERT INTO `checklists` (`subject`, `issue_id`, `created_at`, `updated_at`) VALUES ('ほげほげ', 306, '2022-01-14 22:26:46', '2022-01-14 22:26:46')):

調べてみると以下の情報がヒットした。

https://qiita.com/tomaaaaaaaa/items/08ce75b95df3d310817a

確かにcharacter_set_databaseがlatin1になっていた。。。これは、database.yml にcharset: utf8が入ってなかったためのようです。(encoding: utf8は入っていたので、Redmine自体は日本語が使えており気づきませんでした。)

作ってしまった今から設定を変えても作ってしまったDBには影響しないので、変換してやる必要があります。以下の情報をもとに、どのテーブルがlatin1でできてしまっているか調べてみると、checklist系のテーブルだけでした。

https://www.karakaram.com/changing-the-character-set-to-utf8mb4-after-creating-mysql-table/

SELECT TABLE_NAME,TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=’DB名’;

| checklist_template_categories | latin1_swedish_ci|
| checklist_templates           | latin1_swedish_ci|
| checklists                    | latin1_swedish_ci|

この3つのテーブルをutf8に変換します。

ALTER TABLE checklist_template_categories
    CONVERT TO CHARACTER SET utf8
    COLLATE utf8_general_ci;

ALTER TABLE checklist_templates
    CONVERT TO CHARACTER SET utf8
    COLLATE utf8_general_ci;

ALTER TABLE checklists
    CONVERT TO CHARACTER SET utf8
    COLLATE utf8_general_ci;

とりあえず、直りました 🙂

今後のために、以下を入れておきました。

/etc/redmine/default/database.yml
charset: utf8
encoding: utf8

/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
character-set-server=utf8

あと気になったのが、chrome 97.0.4692.71ではなぜか、作ったチェックリストを削除できませんでした。(ゴミ箱アイコンをクリックしても何も反応しない)試しに、Edge 97.0.1072.62 で同じことをしたらできたので、JavaScriptの動きの問題のようです。。。うーん。

ubuntu 19.10 to 20.04 TLS

Windows に嫌気が差したときに時々使っているubuntu desktop環境を放っておいたらうっかりサポート期限が切れて通常のリポジトリから消えてしまった。。。そのままではメンテナンスバージョンへのアップデートもできないのでなんとか、19.10が残ってるサイト内かとミラーサイトを探したのですが、どこにもない(同期されてしまっている模様)

そんな中、ありがたい記事発見。なるほど、old-releasesというサイトが用意されてるのね。これもありがたい。

さくっと /etc/apt/sources.list のdeb http://jp.archive.ubuntu.com/ubuntu/ をhttp://old-release.ubuntu.com/ubuntu/ に変えて sudo apt update、sudo apt upgrade、 sudo do-release-upgrade で20.04 TLSに上げられました。

ちなみに http://security.ubuntu.com/ubuntuは何に変えたらいいのかよくわからんのでコメントアウトしておいたが、問題なくアップデートできた。(残しておくとエラー出る)

JetPackの接続エラー

サイトは普通に見えているし証明書エラーも出ていないのですが、JetPackの接続時に “cURL error 60: SSL certificate problem: certificate has expired”と言われて接続できない。もちろん証明書の期限は切れていない。

色々調べた結果、安い証明書を使っているので、中間証明書を入れないといけなかったようだ。Ubuntu 20.04の場合こんな感じ。中間証明書は証明書を買ったところに行けば入手できると思います。

$ sudo vi /etc/apache2/sites-enabled/default-ssl.conf
SSLCertificateChainFile /etc/ssl/certs/lambeden_dyndns_org.ca
$ sudo systemctl restart apache2

今更ながらWSL便利

Windows 10でLinuxディストリビューションを使えるって話題になって久しいですが、今更ながらWSL(Windows Subsystem for Linux)を使い始めました。

選択ディストリビューションはubuntu。20.04LTSが使えるようになってました。

普通に使ってる分にはネイティブなubuntuを使ってるのと変わらないレベルですね。びっくりです。

systemctl statusとか打って

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: ホストが落ちています

と言われて初めてあーほんとに偽物なんだと気づく(笑)

普通に /mnt/c/Users/XXX/Documentsとかにアクセスできてしまうし。これは確かに便利だは。

とりあえず、やっておくこと。

sudo apt update
sudo apt upgrade
sudo apt install language-pack-ja
sudo update-locale LANG=ja_JP.UTF-8
sudo apt install manpages-ja manpages-ja-dev

timezoneは元々JSTになってました。

参考

https://www.atmarkit.co.jp/ait/articles/1903/18/news031.html

ubuntu 20.04 mysqlが起動しない問題

18.04 LTSから20.04に上げた時に確認したら普通に上がっていたと思うのですが。。。後日、再起動したらmysqldが正しく上がってきませんでした。

確認したら以下のログが

May 9 23:30:24 abel kernel: [ 5967.758467] audit: type=1400 audit(1589034624.217:34): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/sys/kernel/random/boot_id
" pid=6850 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=0 ouid=0

/etc/apparmor.d/usr.sbin.mysqldを確認すると、確かに許可されていなかったので、以下を追加したら問題なく起動しました。

/proc/sys/kernel/random/boot_id r,

MySQLが8系になって起動時にランダム値を使うようになったのかな。

Ubuntu 18.04 LTS -> 20.04 LTS on GCP

GCPで運用しているこのサイトのOSをUbuntu 18.04 LTSから20.04LTSにアップグレードした。

gcp用でも問題なく do-release-upgrade -d で上げることができた。なお、gcpでアップグレードを掛けると、Kernelは勝手に5.4.0-1009-gcpになる様だ。(apt/sources.listはhttp://us-west1.gce.archive.ubuntu.com/ubuntu/を参照している)

GCPの問題というわけではなく毎回出る軽微な設定の変更な何点かあった。

  • PHP7.2→7.4になったことによりApacheが起動しない問題
May 02 09:14:18 abel systemd[1]: Starting The Apache HTTP Server... 
May 02 09:14:19 abel apachectl[3698]: apache2: Syntax error on line 146 of /etc/apache2/apache2.conf: Syntax error on line 3 of /etc/apache2/mods-enabled/php7.2.load: Cannot load /usr/lib/apache2/modules/libphp7.2.so into server: /usr/l> 
May 02 09:14:19 abel apachectl[3693]: Action 'start' failed. May 02 09:14:19 abel apachectl[3693]: The Apache error log may have more information. May 02 09:14:19 abel systemd[1]: apache2.service: Control process exited, code=exited, status=1/FAILURE 
May 02 09:14:19 abel systemd[1]: apache2.service: Failed with result 'exit-code'. 
May 02 09:14:19 abel systemd[1]: Failed to start The Apache HTTP Server. 

phpモジュールをリンクしなおして解決
# a2dismod php7.2
# a2enmod php7.4
  • dovecot 2.3系での変更
May 2 09:20:53 abel dovecot: config: Warning: please set ssl_dh=</etc/dovecot/dh.pem
May 2 09:20:53 abel dovecot: config: Warning: You can generate it with: dd if=/var/lib/dovecot/ssl-parameters.dat bs=1 skip=88 | openssl dhparam -inform der > /etc/dovecot/dh.pem 
May 2 09:20:53 abel dovecot: imap-login: Error: Failed to initialize SSL server context: Can't load DH parameters: error:1408518A:SSL routines:ssl3_ctx_ctrl:dh key too small: user=<>, rip=126.203.14.194, lip=10.138.0.3, session=<zjVRRZ+ k7lt+yw7C>

May 02 09:23:52 abel dovecot[4362]: config: Warning: NOTE: You can get a new clean config file with: doveconf -Pn > dovecot-new.conf 
May 02 09:23:52 abel dovecot[4362]: config: Warning: Obsolete setting in /etc/dovecot/conf.d/10-ssl.conf:50: ssl_protocols has been replaced by ssl_min_protocol

DH keyを作れと言われるので以下で作る(2048を指定しないと1024で作られてしまう)
dd if=/var/lib/dovecot/ssl-parameters.dat bs=1 skip=88 | openssl dhparam 2048 -inform der > /etc/dovecot/dh.pem

/etc/dovecot/conf.d/10-ssl.confを以下の様に変更
ssl_dh = </etc/dovecot/dh.pem
# ssl_protocols = TLSv1 TLSv1.1 TLSv1.2
ssl_min_protocol = TLSv1

LightSailのdovecotでちょっとはまった話

LightSail Ubuntu dovecot 2.2.33.2-1ubuntu4.3 で最近なぜかiPhoneからメールが取れないことに気づいた。原因がよくわからなかったのだか、/var/log/mail.logにこんなメッセージが。

Aug 15 08:49:21 ls dovecot: imap-login: Disconnected (no auth attempts in 18 secs): user=<>, rip=126.203.xxx.xxx, lip=172.26.xxx.xxx, TLS handshaking: SSL_accept()
syscall failed: Connection reset by peer, session=<AGABaByQw8B+yw7C>

原因らしきもの – dovecot 2.2.33というかOpenSSL1.1.1?でSSL対応しなくなったようでTLSしか使えなくなった。だと思うのですが、iOS 12.4において普通にTLS使えるはずなんだけどなぁ。。。試しにiPhoneのメールアカウントを再登録してみたのですが、なぜかSSLの確認が通らない。。。やっぱり、OpenSSLの変更が関係している気がします。が、解決に至らず。全く繋がらないという訳ではなく一度繋がってしまえば問題ないのですが。。。

情報募集中!

AWS LightSailにお引越し

自宅サーバで動かしていたWordPress(これ)、Redmine、postfixなどをAWS LightSailに引っ越すことにした。

一番楽なのは Linux with WordPressかと思いきや。。。

以外に面倒。初期インストールされているWordPressやMysqlは/opt/bitnamiというところに置いてあって、ubuntuのパッケージではないんですよね。。。

Redmineをubuntuのパッケージから入れようと思うと、パッケージと辻褄が合わなくなってそれらをイチイチ調整しないといけないという。。。

Mysql2::Error: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

という訳で、結局OSだけのLightSailを選んでみました(笑)

選んだモデルはもちろん、一番安い$3.5/月(512MBメモリ、1vCPU、20GB SSD)モデル(笑)

さすがに今まで使ってた自宅の仮想マシンよりメモリがないので、多少チューニングしないとoom-killerが襲い掛かります(笑)

とりあえず必要なものインストール(ほかにも関連でちょいちょい入れてます)

# hostnamectl set-hostname ホスト名
# timedatectl set-timezone Asia/Tokyo
# apt install mysql-server
# apt install wordpress

個人サイトなのでApcheのプロセスそんなに要らないので変更

# vi  /etc/apache2/mods-enabled/mpm_prefork.conf
StartServers            1
MinSpareServers         1
MaxSpareServers         5
MaxRequestWorkers       10
MaxConnectionsPerChild  0 

なんせメモリが512MBなので、SWAP追加

# dd if=/dev/zero of=/swapfile bs=1024K count=512
# chmod 600 /swapfile
# mkswap /swapfile
# swapon /swapfile
# vi /etc/fstab
/swapfile    swap    swap    defaults        0 0

ちなみに、WordPressの移行はエクスポート、インポートで行けるのですが、ちょとだけ注意点。同じドメインに移行する場合、後からドメイン名を変えようと思わない方がいいです。。。(笑)