# owncloudが死んで蘇生した話 ## TL; DR やったことは責任を持って処理する。人間にもプログラムにも言えること。 ## 罪状 - When: - 発生: 2020/04/29 - 復旧: 2020/05/01 - Where: - m1z0r3マシン(森研のadminが管理するESXi上の仮想マシン) - 192.168.100.103/24 (in VPN) - 133.9.207.103/24 (Global) - owncloud(クローズドクラウド)とGrowi(wiki)が動いてる - GrowiはDocker構成になってて被害ゼロ - Who: - Le96 - What: - UbuntuのLTS更新を行った - Why: - セキュリティ・保守性向上目的 - How: - `# do-release-upgrade -d` ## 問題発生 そもそもとして動いてるサービスの事前調査を怠った。 再起動後Ubuntu 20.04 LTSが正常に起動し、aptの各種依存関係を整理した後、Growiの動作を確認したがowncloudがHTTP ERROR 500を吐いていることが発覚。 ## 落ち着いた対応 一回深呼吸してからowncloudのシステム調査を行う。 Ubuntuに乗っかっているapache2を利用している。(それはそう) `# systemctl restart apache2.service`を叩いても変化なし。どうやら設定から死んでいそう。 このあたりでowncloudのlatestを落としてリプレースできないかと悪戦苦闘するも、復旧が第一という判断に至る。 `$ cat /var/www/owncloud/version.php`を叩くとバージョンは9.1.6。 MySQL派生システムであるMariaDBを利用しているようだ。 `$ systemctl status mariadb.service`を叩くとデータベースはまだ活きている。 落ち着いて最低限の情報サルベージを行う。 `mysqldump`の`-p`のあとに続く`xxx`はいつもの。(これは決め打ちした) ```shell $ sudo -Es # mkdir ~/backup # mysqldump -uowncloud -pxxxxxxxxxxxx owncloud > ~/backup/owncloud.dump # cp -r /etc/mysql /etc/mysql_bak # systemctl stop apache2.service # cd /etc/apache2/conf-available # cp owncloud.conf owncloud.conf_bak ``` ## この手に限る 安全を期してMariaDBもUbuntuリポジトリではなく公式リポジトリを別途導入。 phpの公式であるondrejリポジトリはもとから入っていたので割愛。 ここで問題があり、owncloudが通すphpのバージョンが7系だと7.0しかなかったのでphp7.0で構築を行うことにした。(試行錯誤の結果判明) ```shell # systemctl stop apache2.service # apt purge mariadb-server php-common php-mysql # apt autoremove # apt install apache2 libapache2-mod-php7.0 mariadb-server-10.4 php7.0 php7.0-curl php7.0-gd php7.0-intl php7.0-mbstring php7.0-mysql php7.0-xml php7.0-zip ``` ## R.I.P. MariaDB インストールしたはいいがMariaDBサーバサービスが起きてくれない。(`$ systemctl start mariadb.service`がfailed吐いて死ぬ) `# journalctl -xef -u mariadb.service`を叩くと設定フォルダ内の特定のファイルがおかしそう。 直感で先代のMariaDBが遺した負の遺産のせいと断定。汚物は消毒。 ```shell # rm -rf /etc/mysql # apt install --reinstall mariadb-server-10.4 ``` ## DB復旧 0からMariaDBに設定を教え込ませる。 ```shell # mariadb ``` `xxx`はいつもの。 ```sql > CREATE USER IF NOT EXISTS owncloud@localhost; > SET PASSWORD FOR owncloud@localhost = PASSWORD('xxxxxxxxxxxx'); > SELECT Host, User, Password FROM mysql.user; -- ここでowncloud@localhostのPassword Hashを控えておく > CREATE DATABASE owncloud; > SHOW GRANTS FOR owncloud@localhost; > GRANT ALL ON owncloud.* TO owncloud@localhost; > SHOW GRANTS FOR owncloud@localhost; -- 権限付与を確認する ``` ```shell # mysql -uowncloud -pxxxxxxxxxxxx owncloud < ~/backup/owncloud.dump ``` ## It Works! えー完走した感想(激うまギャグ)ですが、つかれた。 原因としてはOSバージョンアップに伴う依存関係破壊か、もしくは適切なシャットダウン手順を踏まなかったために一時ファイルが悪さしたかのどっちかじゃないかなとは思う。 ただ障害対応自体は死ぬほどスキル付くのでみんなも一度は地獄を見てみよう。 ## Google is 偉大 owncloud公式 [Manual Installation on Linux](https://doc.owncloud.org/server/10.4/admin_manual/installation/manual_installation.html) [Database Configuration on Linux](https://doc.owncloud.org/server/10.4/admin_manual/configuration/database/linux_database_configuration.html) owncloudフォーラム [HTTP 500 error on fresh install of owncloud server](https://central.owncloud.org/t/http-500-error-on-fresh-install-of-owncloud-server/6887) [Need helps about owncloud:error with php](https://central.owncloud.org/t/need-helps-about-owncloud-error-with-php) [No database drivers (sqlite, mysql, or postgresql) installed](https://central.owncloud.org/t/no-database-drivers-sqlite-mysql-or-postgresql-installed) [Owncloud Occurs HTTP ERROR 500(Fresh install)](https://central.owncloud.org/t/owncloud-occurs-http-error-500-fresh-install) [Php version is incorrect but I have php7.3.9](https://central.owncloud.org/t/php-version-is-incorrect-but-i-have-php7-3-9) Qiita [(解決)mysql(mariadb)が起動しなくなった](https://qiita.com/sugasaki/items/2085611ca6ccc9b95859) [journalctl 最低限覚えておくコマンド](https://qiita.com/aosho235/items/9fbff75e9cccf351345c) [Mysql関係の備忘録](https://qiita.com/ritukiii/items/afdc91e68d0cf3e0f383) [PDOで could not find driver が出たとき](https://qiita.com/oginom/items/5268fb19eeb80debb0ea) [Ubuntu 17.10 へ ownCloud をインストール (前編)](https://qiita.com/t-kumarr/items/db442c9ed6e238024e59) GitHub [PHP7: Call to undefined function OC\\\\App\\\\simplexml_load_file #15708](https://github.com/nextcloud/server/issues/15708) 個人ブログなど [MySQL/MariaDBのダンプリストア方法一覧【高速】](http://enutake.com/mysql-mariadb-dump-restore/) [NextCloud – PHP module mb multibyte not installed](https://komputergeek.wordpress.com/2017/06/16/nextcloud-php-module-mb-multibyte-not-installed/) [ownCloud手動アップデート (9.1.x から 10.x)](https://ex1.m-yabe.com/archives/3717) [ユーザーを作成する(CREATE USER文)](https://www.dbonline.jp/mysql/user/index1.html) [新しいパスワードを設定する(SET PASSWORD 文、ALTER USER文)](https://www.dbonline.jp/mysql/user/index2.html) [突然MariaDBが逝った・・・](https://reminder.ysrock.com/2018/02/16/%E7%AA%81%E7%84%B6mariadb%E3%81%8C%E9%80%9D%E3%81%A3%E3%81%9F%E3%83%BB%E3%83%BB%E3%83%BB/)