技術者になりたい何か

技術者になりたい何かの覚書的な何かです

postfixでroot宛メールをgmailに転送

サーバに溜まっていくroot宛のメールをgmailに転送するための設定を入れてみることにします。

環境はDebian 9.3。メールサーバはpostfixを使用。

■必要パッケージインストール

$ sudo apt install postfix bsd-mailx libsasl2-modules

postfix自動起動有効に。

$ sudo systemctl enable postfix

Synchronizing state of postfix.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable postfix

 

postfixのmain.cfで設定

$ emacs /etc/postfix/main.cf
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt


■パスワードファイルとハッシュファイルの作成

パスワードファイルはsmtp_sasl_password_mapsで指定したもの。
別に名前はこれじゃなくても良い。

$ emacs /etc/postfix/sasl_passwd
[smtp.gmail.com]:587 <username>@gmail.com:<password>

sasl_passwdは平文でgmailのアカウントとパスワードを保存しているので、
root以外読み取れないようにアクセス権変更

$ sudo chmod 600 /etc/postfix/sasl_passwd

ハッシュファイル作成

$ sudo postmap /etc/postfix/sasl_passwd

設定ファイルの状態

$ ls -la /etc/postfix/
合計 148
drwxr-xr-x 5 root root 4096 2月 9 20:31 .
drwxr-xr-x 104 root root 4096 2月 9 21:00 ..
-rw-r--r-- 1 root root 43 1月 18 19:56 dynamicmaps.cf
drwxr-xr-x 2 root root 4096 9月 27 13:56 dynamicmaps.cf.d
-rw-r--r-- 1 root root 231 2月 9 20:25 main.cf
-rw-r--r-- 1 root root 27130 1月 18 19:56 main.cf.proto
-rw-r--r-- 1 root root 4416 9月 27 13:56 makedefs.out
-rw-r--r-- 1 root root 6068 1月 18 19:56 master.cf
-rw-r--r-- 1 root root 6068 1月 18 19:56 master.cf.proto
-rwxr-xr-x 1 root root 29446 9月 27 13:56 post-install
-rw-r--r-- 1 root root 10170 9月 27 13:56 postfix-files
drwxr-xr-x 2 root root 4096 1月 18 19:56 postfix-files.d
-rwxr-xr-x 1 root root 9502 9月 27 13:56 postfix-script
drwxr-xr-x 2 root root 4096 9月 27 13:56 sasl
-rw------- 1 root root 48 2月 9 20:42 sasl_passwd ★
-rw------- 1 root root 12288 2月 9 20:42 sasl_passwd.db ★

postfix 再起動(or 再読込)

$sudo systemctl restart postfix

■動作確認①

テストメール送信

$ echo "Test message" | mail <username>@gmail.com

→自分のgmailに届けばおk。

ログは/var/log/mail.logに出るので、うまく行かなかったときは確認すると良い

下はうまく行かなかったとき。

アカウント or パスワード間違えてて「535-5.7.8 Username and Password not accepted.」

$ sudo tail -50 /var/log/mail.log
~~抜粋~~
Feb 9 20:37:53 tminserver postfix/pickup[8922]: 9E8B93E0068: uid=1000 from=<tmin>
Feb 9 20:37:53 tminserver postfix/cleanup[8940]: 9E8B93E0068: message-id=<20180209113753.9E8B93E0068@tminserver.localdomain>
Feb 9 20:37:53 tminserver postfix/qmgr[8923]: 9E8B93E0068: from=<tmin@tminserver.localdomain>, size=406, nrcpt=1 (queue active)
★Feb 9 20:37:53 tminserver postfix/smtp[8942]: connect to smtp.gmail.com[2404:6800:4008:c04::6c]:587: Network is unreachable
★Feb 9 20:37:55 tminserver postfix/smtp[8942]: 9E8B93E0068: SASL authentication failed; server smtp.gmail.com[108.177.97.108] said: 535-5.7.8 Username and Password not accepted. Learn more at?535 5.7.8 https://support.google.com/mail/?p=BadCredentials x15sm6410111pff.55 - gsmtp
Feb 9 20:37:57 tminserver postfix/smtp[8942]: 9E8B93E0068: to=<mail@example.com>, relay=smtp.gmail.com[108.177.97.109]:587, delay=3.6, delays=0.11/0.06/3.4/0, dsn=4.7.8, status=deferred (SASL authentication failed; server smtp.gmail.com[108.177.97.109] said: 535-5.7.8 Username and Password not accepted. Learn more at?535 5.7.8 https://support.google.com/mail/?p=BadCredentials n1sm5159052pge.19 - gsmtp)
Feb 9 20:43:10 tminserver postfix[10439]: Postfix is running with backwards-compatible default settings

今度はうまくいったとき。

dsn=2.0.0, status=sent (250 2.0.0 OK 1518176614 i3sm4710337pgs.63 - gsmtp)

Feb 9 20:43:31 tminserver postfix/pickup[10621]: B9D563E006B: uid=1000 from=<tmin>
Feb 9 20:43:31 tminserver postfix/cleanup[10738]: B9D563E006B: message-id=<20180209114331.B9D563E006B@tminserver.localdomain>
Feb 9 20:43:31 tminserver postfix/qmgr[10622]: B9D563E006B: from=<tmin@tminserver.localdomain>, size=406, nrcpt=1 (queue active)
Feb 9 20:43:31 tminserver postfix/smtp[10626]: connect to smtp.gmail.com[2404:6800:4008:c04::6c]:587: Network is unreachable
★ Feb 9 20:43:34 tminserver postfix/smtp[10626]: B9D563E006B: to=<mail@example.com>, relay=smtp.gmail.com[74.125.204.108]:587, delay=3.1, delays=0.08/0/2.1/0.92, dsn=2.0.0, status=sent (250 2.0.0 OK 1518176614 i3sm4710337pgs.63 - gsmtp)
Feb 9 20:43:34 tminserver postfix/qmgr[10622]: B9D563E006B: removed

■root宛のメールを転送する設定。

aliaseの設定

$ cat /etc/aliases
# /etc/aliases
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
root: tmin

rootのところにアカウントを入れる。

$ emacs /etc/aliases
root:<username>@gmail.com

設定反映

$ sudo newaliases

■動作確認②

$ sudo echo test | mail root

gmailにtestでメールが届けばおk。

うまく行っていれば、サーバからのroot宛のmailも転送されてくるはず。

 

てきすとすとりーむ2

テキスト処理系2回目。
テキストデータを加工するための色々。
組み合わせて使うとなんだか色々できる。

■uniq

重複している行をまとめて出力する。
入力するテキストストリームは予めソートしておく必要がある。
ので、多くの場合sortと併用される。

ログの集計とかに便利。nginxとかapacheアクセスログから簡易アクセス解析とかもできます。

というわけでsshdのFailedを集計してみます。先日やったけども。

こういうログから存在しているユーザ名でのログイン失敗ログからIPを抜き出して集計。
(対象ログ→/var/log/auth.log)

Dec 3 00:01:10 tminserver sshd[29952]: Failed password for root from 58.242.83.26 port 41788 ssh2
Dec 3 00:01:13 tminserver sshd[29952]: Failed password for root from 58.242.83.26 port 41788 ssh2
Dec 3 00:01:15 tminserver sshd[29952]: Failed password for root from 58.242.83.26 port 41788 ssh2
Dec 3 00:01:17 tminserver sshd[29952]: Failed password for root from 58.242.83.26 port 41788 ssh2
Dec 3 00:12:15 tminserver sshd[30090]: Failed password for invalid user admin from 103.207.37.155 port 507
05 ssh2
Dec 3 00:12:23 tminserver sshd[30092]: Failed password for invalid user support from 103.207.37.155 port 6
3144 ssh2
Dec 3 00:12:32 tminserver sshd[30099]: Failed password for invalid user admin from 103.207.37.155 port 620
87 ssh2

パターン①rootでログイン失敗しているアクセス元IPの集計

集計期間は12/3-6 →grep 'Dec [3-6]'
失敗してるのを抜き出す →grep 'Failed'
存在しないユーザ名での失敗ははじく→grep -v 'invalid'
IPのカラム(フィールド)を抜き出す→ cut -d ' ' -f 12
抜き出したIPをソート → sort
ソートしたIPの重複分削除するけどそれぞれの件数(行数?)はカウントする → uniq -c
カウントした結果が1カラム目に出るので、多い方から順にソート → sort -nr

$ sudo grep 'Dec [3-6]' /var/log/auth.log | grep 'Failed' | grep -v 'invalid' | cut -d ' ' -f 12 | sort | uniq -c | sort -nr
54381 58.242.83.26
15564 42.7.26.91
156 193.201.224.218
21 103.207.37.155
14 103.99.1.187
14 103.207.37.154
12 92.247.83.86
12 42.62.51.53
12 103.99.0.199
10 181.214.87.4
6 91.126.205.238
6 90.226.61.158
6 87.123.137.84
6 84.135.151.34
6 83.233.45.72
6 69.165.46.170
6 69.131.92.126
6 61.153.20.84
6 60.179.11.32
6 60.173.82.156
6 60.165.208.28
6 59.15.210.188
6 59.120.249.139
6 46.72.18.89
6 41.82.138.10
6 39.71.158.158
6 38.108.61.214


~~~以下略~~~~

 

パターン②存在しないユーザで入力されているユーザ名を集計。

集計期間は12/3-6 →grep 'Dec [3-6]'
失敗してるのを抜き出す →grep 'Failed'
存在しないユーザ名での失敗を抜き出す →grep 'invalid user'
入力されたユーザ名のカラム(フィールド)を抜き出す→ cut -d ' ' -f 12
抜き出したユーザ名をソート → sort
ソートしたユーザ名の重複分削除するけどそれぞれの件数(行数?)はカウントする → uniq -c
カウントした結果が1カラム目に出るので、多い方から順にソート → sort -nr

$ sudo grep 'Dec [3-6]' /var/log/auth.log | grep 'Failed' | grep 'invalid user' | cut -d ' ' -f 12 | sort | uniq -c | sort -nr
446 admin
52 user
36 ubnt
33 test
32 pi
31 support
27
25 ftp
22 guest
22 ftpuser
21 service
20 1234
20 0
14 user1
14 adm
14 111111
13 super
13 operator
13 default
10 manager
10 22
9 sysadmin
9 nagios
9 a
8 webmaster
8 tomcat
8 scan
8 postgres
8 monitor
8 git
8 fax
8 apache
8 123321
7 www
7 usuario
7 report
7 mother
7 matsumoto
7 auction
7 administrator
7 123
~~~以下省略~~~~

 
つかpiって誰だよ

■wc

ファイルの行数、単語数、文字数を表示。
数えるのがめんどい時に便利。

オプション
-c 文字数(バイト数)を表示
-l 行数を表示
-w 単語数を表示

単純に大きいファイルの時に行数見たりとか、
grepの検索結果をwc -l に渡して件数カウントしたりする時とかに使える。

上記sshアタックのログの場合で、rootでログインしようとして失敗しているログの件数(12/3~12/6)


$ sudo grep 'Dec [3-6]' /var/log/auth.log.1 | grep 'Failed' | grep 'root' |wc -l
70539

■pr

印刷前の整形によく使うらしい。
コマンドラインから印刷・・・?

-l でヘッダ・フッタを含むページの行数を指定。+1:2で1ページ目から2ページ目まで。

$ pr -l 25 +1:2 dpkg.log


2017-12-13 18:16 dpkg.log 1 ページ


2017-12-02 08:56:42 startup archives unpack
2017-12-02 08:57:16 upgrade curl:amd64 7.38.0-4+deb8u7 7.38.0-4+deb8u8
2017-12-02 08:57:16 status half-configured curl:amd64 7.38.0-4+deb8u7
2017-12-02 08:57:17 status unpacked curl:amd64 7.38.0-4+deb8u7
2017-12-02 08:57:17 status half-installed curl:amd64 7.38.0-4+deb8u7
2017-12-02 08:57:17 status triggers-pending man-db:amd64 2.7.0.2-5
2017-12-02 08:57:17 status half-installed curl:amd64 7.38.0-4+deb8u7
2017-12-02 08:57:17 status unpacked curl:amd64 7.38.0-4+deb8u8
2017-12-02 08:57:17 status unpacked curl:amd64 7.38.0-4+deb8u8
2017-12-02 08:57:18 upgrade libcurl3:amd64 7.38.0-4+deb8u7 7.38.0-4+deb8u8
2017-12-02 08:57:18 status half-configured libcurl3:amd64 7.38.0-4+deb8u7
2017-12-02 08:57:18 status unpacked libcurl3:amd64 7.38.0-4+deb8u7
2017-12-02 08:57:18 status half-installed libcurl3:amd64 7.38.0-4+deb8u7
2017-12-02 08:57:18 status half-installed libcurl3:amd64 7.38.0-4+deb8u7
2017-12-02 08:57:18 status unpacked libcurl3:amd64 7.38.0-4+deb8u8

 

 

 

2017-12-13 18:16 dpkg.log 2 ページ


2017-12-02 08:57:18 status unpacked libcurl3:amd64 7.38.0-4+deb8u8
2017-12-02 08:57:19 upgrade libcurl3-gnutls:amd64 7.38.0-4+deb8u7 7.38.0-4+deb8u8
2017-12-02 08:57:19 status half-configured libcurl3-gnutls:amd64 7.38.0-4+deb8u7
2017-12-02 08:57:19 status unpacked libcurl3-gnutls:amd64 7.38.0-4+deb8u7
2017-12-02 08:57:19 status half-installed libcurl3-gnutls:amd64 7.38.0-4+deb8u7
2017-12-02 08:57:19 status half-installed libcurl3-gnutls:amd64 7.38.0-4+deb8u7
2017-12-02 08:57:20 status unpacked libcurl3-gnutls:amd64 7.38.0-4+deb8u8
2017-12-02 08:57:20 status unpacked libcurl3-gnutls:amd64 7.38.0-4+deb8u8
2017-12-02 08:57:20 upgrade bzr:all 2.6.0+bzr6595-6 2.6.0+bzr6595-6+deb8u1
2017-12-02 08:57:20 status half-configured bzr:all 2.6.0+bzr6595-6
2017-12-02 08:57:20 status unpacked bzr:all 2.6.0+bzr6595-6
2017-12-02 08:57:20 status half-installed bzr:all 2.6.0+bzr6595-6
2017-12-02 08:57:20 status half-installed bzr:all 2.6.0+bzr6595-6
2017-12-02 08:57:20 status unpacked bzr:all 2.6.0+bzr6595-6+deb8u1
2017-12-02 08:57:21 status unpacked bzr:all 2.6.0+bzr6595-6+deb8u1

 

これリダイレクトかなんかで新しいファイルに出力すると印刷時にきれいになるという事かな?
ぶっちゃけ使う場面がいまいち・・・

■fmt

テキストを決められた桁に整形する。

オプション
-w 一行の幅を設定

$ head -5 /var/log/dpkg.log
2017-12-02 08:56:42 startup archives unpack
2017-12-02 08:57:16 upgrade curl:amd64 7.38.0-4+deb8u7 7.38.0-4+deb8u8
2017-12-02 08:57:16 status half-configured curl:amd64 7.38.0-4+deb8u7
2017-12-02 08:57:17 status unpacked curl:amd64 7.38.0-4+deb8u7
2017-12-02 08:57:17 status half-installed curl:amd64 7.38.0-4+deb8u7


↑のようなのを最大幅40で整形すると・・・

$ head -5 /var/log/dpkg.log | fmt -w 40
2017-12-02 08:56:42 startup archives
unpack 2017-12-02 08:57:16 upgrade
curl:amd64 7.38.0-4+deb8u7
7.38.0-4+deb8u8 2017-12-02
08:57:16 status half-configured
curl:amd64 7.38.0-4+deb8u7 2017-12-02
08:57:17 status unpacked curl:amd64
7.38.0-4+deb8u7 2017-12-02 08:57:17
status half-installed curl:amd64
7.38.0-4+deb8u7

とはいえなかなかうまいとこで切れてくれないです。行が変に結合して余計読みにくい。
こういう時は-sオプション付けて行結合しないように指定してやると・・・

$ head -5 /var/log/dpkg.log | fmt -s -w 40
2017-12-02 08:56:42 startup archives
unpack
2017-12-02 08:57:16 upgrade curl:amd64
7.38.0-4+deb8u7 7.38.0-4+deb8u8
2017-12-02 08:57:16 status
half-configured curl:amd64
7.38.0-4+deb8u7
2017-12-02 08:57:17 status unpacked
curl:amd64 7.38.0-4+deb8u7
2017-12-02 08:57:17 status
half-installed curl:amd64
7.38.0-4+deb8u7

さっきよりましになりましたね。

■expand

テキストファイル内のタブをスペースに変換

オプション 
-i 行頭のタブのみ変換
-t タブ幅 タブ幅を設定する

■unexpand

行頭にある連続した空白をタブに変換

オプション
-a 行頭以外の空白も変換
-t タブ幅 タブ幅指定(デフォルトでは8ケタ)

インデント付けるときの変換とかには便利かもしれない
あと空白→タブに一括返還しといてエクセル貼り付けとか?

■xargs

これはテキストストリームに入れていいのかよくわからないけども。
標準入力から受け取った文字列を引数に指定して、与えられたコマンドを実行。
引数の数が多すぎた場合でも良きに計らってくれる気が利くやつ。
大量のログ調査とかでうまい事やってくれてるのがこいつの仕業である。

$ find -type f -name "*log*"

logがファイル名に含まれるファイルをカレントディレクトリから検索。

これをxargs でcatにつなぐと、cat の引数として上記ファイルが全てうまい事引き渡される。
ので、順次catで展開されていく。後ろに| grep 'hoge' をつければその結果からhogeが含まれる行を抽出してくれる。

$ find -type f -name "*log*" | xargs cat | grep "hoge"

引き渡すコマンド次第では引数となるファイルが多すぎるとエラーを吐いたりすることがある。
その辺上手くやってくれるのがxargs。
xargs [コマンド] のコマンド部分の引数として前の結果を渡すので、コマンド次第ではうまくいかないときもなきにしもあらず。


$ sudo find /var/log -type f -name 'mail.log.?.gz'
/var/log/mail.log.2.gz
/var/log/mail.log.4.gz
/var/log/mail.log.3.gz

この出力されたmail.log[2-4].gz をxargsでzcatに渡してgrepをかけると

$ sudo find /var/log -type f -name 'mail.log.?.gz' | xargs sudo zcat | grep 'status=sent'
Jul 7 17:33:15 tminserver postfix/local[6448]: 0E4B540D99: to=<tmin@tminserver.localdomain>, orig_to=<root>, relay=local, delay=0.56, delays=0.33/0.09/0/0.15, dsn=2.0.0, status=sent (delivered to mailbox)

3つのファイルが順次に後ろのzcatに渡される→grep status=sentで。
ちなみに下記のコマンドと一緒になる。(最初のカラムにファイルフルパスが出るかどうか)

$ sudo zgrep 'status=sent' /var/log/mail.log.?.gz
/var/log/mail.log.3.gz:Jul 7 17:33:15 tminserver postfix/local[6448]: 0E4B540D99: to=<tmin@tminserver.localdomain>, orig_to=<root>, relay=local, delay=0.56, delays=0.33/0.09/0/0.15, dsn=2.0.0, status=sent (delivered to mailbox) 


上手く使えば○○日以上たったファイルを前部圧縮とか全部退避、とかもできる。

mariadbが終わらない

今更ですがDebianをjessieからstretchにUpgradeしました。

Upgrade自体はいつもどおり /etc/apy/sources.list のjessieをstretchに置き換えて、

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade

でほぼ通ったのですが、この際にmaeiadb-serverが依存関係でエラーはいてちょっとハマりました。

症状:

mariadb-serverがupgradeできない
・たぶんmariadb-clientとの依存関係
・でもmariadb-serverをremoveもできない
・メッセージは「mariadb-serverが走ってるから手動で止めてよ」みたいなこと言ってるけど、systemctlとかserviceでは止まってる(というかFialedになってる)

原因:

どうやらmariadb-serverがsafe modeで走ってて、これを強制的に止めてやればよかった

対処:

ps でプロセス番号調べてkill -9
止まったの確認してからautoremoveなりremoveなりupgradeなりすればおk

1.発端

jessieからstretchへのUpgrade作業にてdist-upgrade時にエラーが出ていたので、まずは普通に修復を試みる。

$ sudo apt-get autoremove
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
これらを直すためには 'apt --fix-broken install' を実行する必要があるかもしれません。
提案パッケージ:
mariadb-test netcat-openbsd tinyca
以下のパッケージは「削除」されます:
mariadb-server-10.0 mariadb-server-core-10.0
以下のパッケージが新たにインストールされます:
libjemalloc1 mariadb-client-10.1 mariadb-client-core-10.1 mariadb-server-10.1 mariadb-server-core-10.1 socat
アップグレード: 0 個、新規インストール: 6 個、削除: 2 個、保留: 266 個。
693 個のパッケージが完全にインストールまたは削除されていません。
21.8 MB 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 78.2 MB のディスク容量が消費されます。
続行しますか? [Y/n] y
パッケージを事前設定しています ...
apt (1.4.8) を設定しています ...
新バージョンの設定ファイル /etc/apt/apt.conf.d/01autoremove をインストールしています ...
新バージョンの設定ファイル /etc/kernel/postinst.d/apt-auto-removal をインストールしています ...
usermod: 変更はありません
Created symlink /etc/systemd/system/timers.target.wants/apt-daily-upgrade.timer → /lib/systemd/system/apt-daily-upgrade
.timer.
Created symlink /etc/systemd/system/timers.target.wants/apt-daily.timer → /lib/systemd/system/apt-daily.timer.
Removing obsolete conffile /etc/cron.daily/apt ...
(データベースを読み込んでいます ... 現在 194534 個のファイルとディレクトリがインストールされています。)
mariadb-server-10.0 (10.0.32-0+deb8u1) を削除しています ...
1500
There is a MySQL server running, but we failed in our attempts to stop it.
Stop it yourself and try again!
dpkg: パッケージ mariadb-server-10.0 の処理中にエラーが発生しました (--remove):
サブプロセス インストール済みの pre-removal スクリプト はエラー終了ステータス 1 を返しました
Job for mysql.service failed because the control process exited with error code.
See "systemctl status mysql.service" and "journalctl -xe" for details.
invoke-rc.d: initscript mysql, action "start" failed.
mysql.service - LSB: Start and stop the mysql database server daemon
Loaded: loaded (/etc/init.d/mysql)
Active: failed (Result: exit-code) since Fri 2017-12-08 11:21:13 JST; 19ms ago
Docs: man:systemd-sysv-generator(8)
Process: 3153 ExecStart=/etc/init.d/mysql start (code=exited, status=1/FAILURE)

12月 08 11:20:42 tminserver /etc/init.d/mysql[3180]: 171208 11:20:42 mysqld_safe A mysqld process already exists
12月 08 11:20:42 tminserver mysqld_safe[3227]: A mysqld process already exists
12月 08 11:21:13 tminserver mysql[3153]: Starting MariaDB database server: mysqld . . . . . . . . . . . . . . .…failed!
12月 08 11:21:13 tminserver systemd[1]: mysql.service: control process exited, code=exited status=1
12月 08 11:21:13 tminserver systemd[1]: Failed to start LSB: Start and stop the mysql database server daemon.
12月 08 11:21:13 tminserver systemd[1]: Unit mysql.service entered failed state.
Hint: Some lines were ellipsized, use -l to show in full.
dpkg: error while cleaning up:
サブプロセス インストール済みの post-installation スクリプト はエラー終了ステータス 1 を返しました
処理中にエラーが発生しました:
mariadb-server-10.0
W: システムにサンドボックスユーザ '_apt' がありません。権限を削除できません
E: Sub-process /usr/bin/dpkg returned an error code (1)

 

ダメです。
ちなみに apt --fix-broken install しても、apt-get remove mariadb-serverしても dpkg --configure -a してもだめです。

 

ポイントはここだった模様。

There is a MySQL server running, but we failed in our attempts to stop it.
Stop it yourself and try again!

2.対処1(失敗)

なんかMySQLが走ってるとか言ってるので、systemctlで状態確認。

$ systemctl status mysql
mysql.service - LSB: Start and stop the mysql database server daemon
Loaded: loaded (/etc/init.d/mysql)
Active: failed (Result: exit-code) since Fri 2017-12-08 11:21:13 JST; 2min 0s ago
Docs: man:systemd-sysv-generator(8)
Process: 3153 ExecStart=/etc/init.d/mysql start (code=exited, status=1/FAILURE)

Failしてます。
手動で止めようとしてみます。

$ sudo systemctl stop mysql

$ systemctl status mysql
mysql.service - LSB: Start and stop the mysql database server daemon
Loaded: loaded (/etc/init.d/mysql)
Active: failed (Result: exit-code) since Fri 2017-12-08 11:21:13 JST; 2min 17s ago
Docs: man:systemd-sysv-generator(8)
Process: 3153 ExecStart=/etc/init.d/mysql start (code=exited, status=1/FAILURE)

$ journalctl -xe
Hint: You are currently not seeing messages from other users and the system.
Users in the 'systemd-journal' group can see all messages. Pass -q to
turn off this notice.
No journal files were opened due to insufficient permissions.

変わってません。ここでautoremoveとかしてもやはり同じ。
つかFailしてるのに起動してるとは何事?

3.対処2(成功)

実はsafemodeでmariadbが起動していた模様です。
psで確認。

$ ps aux | grep sql
root 672 0.0 0.1 19524 3484 ? S 11:32 0:00 /bin/bash /usr/bin/mysqld_safe
mysql 753 0.1 4.4 735512 85424 ? Sl 11:32 0:02 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-log-error --pid-file=tminserver.pid
root 754 0.0 0.0 26444 1284 ? S 11:32 0:00 logger -t mysqld -p daemon error
tmin 14764 0.0 0.0 12264 992 pts/0 S+ 12:05 0:00 grep sql

プロセスがわかったので、kill -9 で強制終了

$ sudo kill -9 672
$ sudo kill -9 753
$ sudo kill -9 754

ちゃんと終了したか確認。

$ ps aux | grep sql
tmin 14764 0.0 0.0 12264 992 pts/0 S+ 12:05 0:00 grep sql

apt 再実行

$ sudo apt --fix-broken install

mariadb-server-10.0 (10.0.32-0+deb8u1) を削除しています ...
以前に未選択のパッケージ mariadb-client-core-10.1 を選択しています。
(データベースを読み込んでいます ... 現在 194442 個のファイルとディレクトリがインストールされています。)
.../mariadb-client-core-10.1_10.1.26-0+deb9u1_amd64.deb を展開する準備をしています ...
mariadb-client-core-10.1 (10.1.26-0+deb9u1) を展開しています...
以前に未選択のパッケージ libjemalloc1 を選択しています。
.../libjemalloc1_3.6.0-9.1_amd64.deb を展開する準備をしています ...
libjemalloc1 (3.6.0-9.1) を展開しています...
以前に未選択のパッケージ mariadb-client-10.1 を選択しています。
.../mariadb-client-10.1_10.1.26-0+deb9u1_amd64.deb を展開する準備をしています ...
mariadb-client-10.1 (10.1.26-0+deb9u1) を展開しています...
(データベースを読み込んでいます ... 現在 194499 個のファイルとディレクトリがインストールされています。)
mariadb-server-core-10.0 (10.0.32-0+deb8u1) を削除しています ...
以前に未選択のパッケージ mariadb-server-core-10.1 を選択しています。
以前に未選択のパッケージ mariadb-server-core-10.1 を選択しています。
(データベースを読み込んでいます ... 現在 194419 個のファイルとディレクトリがインストールされています。)
.../mariadb-server-core-10.1_10.1.26-0+deb9u1_amd64.deb を展開する準備をしています ...
.../mariadb-server-core-10.1_10.1.26-0+deb9u1_amd64.deb を展開する準備をしています ...
mariadb-server-core-10.1 (10.1.26-0+deb9u1) を展開しています...
mariadb-server-core-10.1 (10.1.26-0+deb9u1) を展開しています...
以前に未選択のパッケージ socat を選択しています。
.../socat_1.7.3.1-2+deb9u1_amd64.deb を展開する準備をしています ...
socat (1.7.3.1-2+deb9u1) を展開しています...
以前に未選択のパッケージ mariadb-server-10.1 を選択しています。
.../mariadb-server-10.1_10.1.26-0+deb9u1_amd64.deb を展開する準備をしています ...
/var/lib/mysql: found previous version 10.0
mariadb-server-10.1 (10.1.26-0+deb9u1) を展開しています...
libjemalloc1 (3.6.0-9.1) を設定しています ...
socat (1.7.3.1-2+deb9u1) を設定しています ...
mariadb-client-core-10.1 (10.1.26-0+deb9u1) を設定しています ...
libc-bin (2.24-11+deb9u1) のトリガを処理しています ...
systemd (232-25+deb9u1) のトリガを処理しています ...
man-db (2.7.6.1-2) のトリガを処理しています ...
mariadb-client-10.1 (10.1.26-0+deb9u1) を設定しています ...
mariadb-server-core-10.1 (10.1.26-0+deb9u1) を設定しています ...
mariadb-server-10.1 (10.1.26-0+deb9u1) を設定しています ...
新バージョンの設定ファイル /etc/init.d/mysql をインストールしています ...
新バージョンの設定ファイル /etc/logrotate.d/mysql-server をインストールしています ...
新バージョンの設定ファイル /etc/mysql/debian-start をインストールしています ...
Created symlink /etc/systemd/system/mysql.service → /lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /lib/systemd/system/mariadb.service.
insserv: warning: current start runlevel(s) (empty) of script `mysql' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `mysql' overrides LSB defaults (0 1 6).
mariadb-server (10.1.26-0+deb9u1) を設定しています ...
systemd (232-25+deb9u1) のトリガを処理しています ...

 

通りましたね。

状態確認。

$ ps aux | grep sql
mysql 17785 0.2 4.1 677900 79808 ? Ssl 12:09 0:00 /usr/sbin/mysqld
tmin 18694 0.0 0.0 12264 936 pts/0 S+ 12:15 0:00 grep sql


このあと再度dist -upgradeすると、止まってた更新たちもちゃんと入ります。

しかし、普通mysqlのsafemodeってsystemctlとかserviceで起動・停止ができたと思うんだけど・・・

Sponsored Link