trippyboy

5月 302017
 

どうも、大変ご無沙汰しております。
社会の役に立つエンジニアこと、TrippyBoyの愉快な日々の管理人です。

今日は、久しぶりにMailmanを使ったメーリングリストシステムをサクッと香ばしく仕上げようと思った際に直面しました問題のご紹介と、問題を解決した方法をここに共有させて頂きます。

いつもながら、CentOSのことと言ったらこちらのサイト

https://centossrv.com/postfix-mailman.shtml を参考に、Mailmanの導入を行っておりました。

手順を参考に順調に進めまして、最新のMailman(本日時点で2.1.23)を用いて以下の手順に差し掛かったときに、エラーに遭遇しました。

[root@hoge mailman-2.1.23]# su mailman -s "/bin/bash" -c "./configure --with-cgi-gid=apache"
checking for --with-python... no
checking for python... /usr/bin/python
checking Python interpreter... /usr/bin/python
checking Python version... 2.6.6
checking dnspython... configure: error:

***** dnspython not found. It is required for the new
***** dmarc_moderation_action featurer. Get it from
***** <http://www.dnspython.org/> or
***** <https://pypi.python.org/pypi/dnspython/>
[root@hoge mailman-2.1.23]#

 

checking dnspython… configure: error:

そもそもpythonとかあんまり触れたことがないので、最初はうまくいっているのか言っていないのかもわからなかったわけですが、ちょっとみてみると、「configure: error:」ってなっているので、何かしら問題が起きてるんだなって思いました。

そこで、少し目を凝らしてみてみると・・・

dnspython not found

て、なってました。

サクッとGoogle検索してみて、英語のページが幾つかヒットしたのですが、CentOS向けの解決歩法がなく、ふとした方法で解決したのでここに共有しておきます。

無論、pythonのソースファイルを持ってきて、コンパイルしちゃおうって動ける方には不要な情報かもしれませんがね(笑)

 

yum で とりあえず、pythonをsearchしてdnsでgrepしてみました。

 

[root@hoge mailman-2.1.23]# yum search  python | grep dns
cjdns-python.noarch : Python tools for cjdns
ldns-python.i686 : Python extensions for ldns
ldns-python.x86_64 : Python extensions for ldns
python-dns.noarch : DNS toolkit for Python
python-pydns.noarch : Python module for DNS (Domain Name Service)
cjdns-graph.noarch : Python tools for cjdns
python-pyldns.x86_64 : Header files, libraries and development documentation for
                     : ldns.
[root@hoge mailman-2.1.23]#

 

ここで、ざっとみてどれにしようかなと思ったのですが、

Google検索で「dnspython」と検索すると、一番上にヒットするページの概説部分に、

dnspython is a DNS toolkit for Python

とあったので、上記yum searchの結果のうち、

python-dns.noarch : DNS toolkit for Python

をインストールすることにしました。

このパッケージはepelリポジトリから入手可能ですので、epelリポジトリを追加されていない方は別途追加した上で、インストールしてみて下さい。

[root@hoge mailman-2.1.23]# yum info python-dns.noarch
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.jaist.ac.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * remi-safe: mirrors.mediatemple.net
 * rpmforge: ftp.kddilabs.jp
 * updates: ftp.tsukuba.wide.ad.jp
インストール済みパッケージ
名前                : python-dns
アーキテクチャ      : noarch
バージョン          : 1.11.1
リリース            : 2.el6
容量                : 1.0 M
リポジトリー        : installed
提供元リポジトリー  : epel
要約                : DNS toolkit for Python
URL                 : http://www.dnspython.org/
ライセンス          : MIT
説明                : dnspython is a DNS toolkit for Python. It supports almost all record
                    : types. It can be used for queries, zone transfers, and dynamic
                    : updates. It supports TSIG authenticated messages and EDNS0.
                    :
                    : dnspython provides both high and low level access to DNS. The high
                    : level classes perform queries for data of a given name, type, and
                    : class, and return an answer set. The low level classes allow direct
                    : manipulation of DNS zones, messages, names, and records.

インストール後は問題なくconfigureできましたとさ。

[root@hoge mailman-2.1.23]# yum -y install python-dns.noarch
読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.jaist.ac.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * remi-safe: mirrors.mediatemple.net
 * rpmforge: ftp.kddilabs.jp
 * updates: ftp.tsukuba.wide.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package python-dns.noarch 0:1.11.1-2.el6 will be インストール
--> 依存性の処理をしています: python-crypto のパッケージ: python-dns-1.11.1-2.el6.noarch
--> トランザクションの確認を実行しています。
---> Package python-crypto.x86_64 0:2.0.1-22.el6 will be インストール
--> 依存性解決を終了しました。

依存性を解決しました

====================================================================================================================================================================================
 パッケージ                                     アーキテクチャ                          バージョン                                      リポジトリー                           容量
====================================================================================================================================================================================
インストールしています:
 python-dns                                     noarch                                  1.11.1-2.el6                                    epel                                  238 k
依存性関連でのインストールをします。:
 python-crypto                                  x86_64                                  2.0.1-22.el6                                    base                                  159 k

トランザクションの要約
====================================================================================================================================================================================
インストール         2 パッケージ

総ダウンロード容量: 397 k
インストール済み容量: 1.5 M
パッケージをダウンロードしています:
(1/2): python-crypto-2.0.1-22.el6.x86_64.rpm                                                                                                                 | 159 kB     00:00
(2/2): python-dns-1.11.1-2.el6.noarch.rpm                                                                                                                    | 238 kB     00:00
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                                                441 kB/s | 397 kB     00:00
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  インストールしています  : python-crypto-2.0.1-22.el6.x86_64                                                                                                                   1/2
  インストールしています  : python-dns-1.11.1-2.el6.noarch                                                                                                                      2/2
  Verifying               : python-dns-1.11.1-2.el6.noarch                                                                                                                      1/2
  Verifying               : python-crypto-2.0.1-22.el6.x86_64                                                                                                                   2/2

インストール:
  python-dns.noarch 0:1.11.1-2.el6

依存性関連をインストールしました:
  python-crypto.x86_64 0:2.0.1-22.el6

完了しました!
[root@hoge mailman-2.1.23]#

 

yumインストールが終わったあとにもう一度configure実施

[root@hoge mailman-2.1.23]# su mailman -s "/bin/bash" -c "./configure --with-cgi-gid=apache"
checking for --with-python... no
checking for python... /usr/bin/python
checking Python interpreter... /usr/bin/python>
checking Python version... 2.6.6
checking dnspython... ok
checking Python's email package... ok
checking Japanese codecs... ok
checking Korean codecs... ok
checking that Python has a working distutils... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether make sets $(MAKE)... yes
checking for true... /bin/true
checking for --without-gcc... no
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether #! works in shell scripts... yes
checking for --with-var-prefix... no
checking for --with-permcheck... yes
checking for --with-username... mailman
checking for user name "mailman"... okay
checking for --with-groupname... mailman
checking for group name "mailman"... okay
checking permissions on /usr/local/mailman... okay
checking for mail wrapper group; i.e. --with-mail-gid... mailman
checking for CGI wrapper group; i.e. --with-cgi-gid... apache
checking for CGI extensions... no
checking for --with-mailhost... no
checking for --with-urlhost... no
checking for default mail host name... hogehoge
checking for default URL host component... hogehoge
checking for strerror... yes
checking for setregid... yes
checking for syslog... yes
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking syslog.h usability... yes
checking syslog.h presence... yes
checking for syslog.h... yes
checking for uid_t in sys/types.h... yes
checking type of array argument to getgroups... gid_t
checking for vsnprintf... yes
configure: creating ./config.status
config.status: creating misc/paths.py
config.status: creating Mailman/Defaults.py
config.status: creating Mailman/mm_cfg.py.dist
config.status: creating src/Makefile
config.status: creating misc/Makefile
config.status: creating bin/Makefile
config.status: creating Mailman/Makefile
config.status: creating Mailman/Cgi/Makefile
config.status: creating Mailman/Logging/Makefile
config.status: creating Mailman/Archiver/Makefile
config.status: creating Mailman/Commands/Makefile
config.status: creating Mailman/Handlers/Makefile
config.status: creating Mailman/Bouncers/Makefile
config.status: creating Mailman/Queue/Makefile
config.status: creating Mailman/MTA/Makefile
config.status: creating Mailman/Gui/Makefile
config.status: creating templates/Makefile
config.status: creating cron/Makefile
config.status: creating scripts/Makefile
config.status: creating messages/Makefile
config.status: creating cron/crontab.in
config.status: creating misc/mailman
config.status: creating Makefile
config.status: creating tests/Makefile
config.status: creating tests/bounces/Makefile
config.status: creating tests/msgs/Makefile
config.status: creating build/bin/add_members
config.status: creating build/bin/arch
config.status: creating build/bin/change_pw
config.status: creating build/bin/check_db
config.status: creating build/bin/check_perms
config.status: creating build/bin/cleanarch
config.status: creating build/bin/clone_member
config.status: creating build/bin/config_list
config.status: creating build/bin/convert.py
config.status: creating build/bin/discard
config.status: creating build/bin/dumpdb
config.status: creating build/bin/export.py
config.status: creating build/bin/find_member
config.status: creating build/bin/fix_url.py
config.status: creating build/bin/genaliases
config.status: creating build/bin/inject
config.status: creating build/bin/list_admins
config.status: creating build/bin/list_lists
config.status: creating build/bin/list_members
config.status: creating build/bin/list_owners
config.status: creating build/bin/mailmanctl
config.status: creating build/bin/mmsitepass
config.status: creating build/bin/msgfmt.py
config.status: creating build/bin/newlist
config.status: creating build/bin/pygettext.py
config.status: creating build/bin/qrunner
config.status: creating build/bin/remove_members
config.status: creating build/bin/reset_pw.py
config.status: creating build/bin/rmlist
config.status: creating build/bin/show_qfiles
config.status: creating build/bin/sync_members
config.status: creating build/bin/transcheck
config.status: creating build/bin/unshunt
config.status: creating build/bin/update
config.status: creating build/bin/version
config.status: creating build/bin/withlist
config.status: creating build/bin/b4b5-archfix
config.status: creating build/bin/rb-archfix
config.status: creating build/contrib/check_perms_grsecurity.py
config.status: creating build/contrib/qmail-to-mailman.py
config.status: creating build/contrib/courier-to-mailman.py
config.status: creating build/contrib/rotatelogs.py
config.status: creating build/cron/bumpdigests
config.status: creating build/cron/checkdbs
config.status: creating build/cron/cull_bad_shunt
config.status: creating build/cron/disabled
config.status: creating build/cron/gate_news
config.status: creating build/cron/mailpasswds
config.status: creating build/cron/nightly_gzip
config.status: creating build/cron/senddigests
config.status: executing default commands
configuration completed at Tue May 30 22:08:40 JST 2017
[root@hoge mailman-2.1.23]#

 

まとめ

dnspython not found が出たら
epelリポジトリからpython-dns.noarchをインストールする

 

めでたしめでたし。

 

3月 022017
 

WebPatioの拡張版である「Forum Patio v1.54s」で作った掲示板をWindows10で使っていて、ファイルをアップロードしようとしたんだが、こんなエラーが表示されてアップロードが出来なかった。

File_type Error: ret=, i=, fname=, ext= でした。拡張子が 以外のファイルはアップロード出来ません。

これ、調べてみたところ、Windows10上でのファイルの拡張子が一部大文字で認識されていて、そんんでもってWebpatioが拡張子を小文字で判定しているために起きていた。

掲示板のルートディレクトリ/lib/upload.pl というファイルで拡張子の判定を行っている箇所があったので、該当箇所を大文字小文字関係なく判定できるように変更した

[root@infra bbs]# diff lib/upload.pl.20170303 lib/upload.pl
54c54
< if ($fext[-1] eq $ky) { $ex = "." . $ky; last; }
---
> if ($fext[-1] =~ /$ky/i ) { $ex = "." . $ky; last; }
[root@infra bbs]#

「$fext[-1] eq $ky」ってのが完全一致で拡張子を比較していて、アップロードしているファイルの拡張子が大文字の場合には、init.cgiで定義している小文字の拡張子一覧にヒットしないので、その部分を「$fext[-1] =~ /$ky/i」に変更し、大文字小文字の区別をなくした。

 

以上。

2月 202017
 

Winshotにて取得したスクリーンショットのファイル名にyyyymmdd等を入れられないかって事で。

入れられるんです!

Winshotのヘルプが機能しないので、ヘルプを表示させるためだけにも一苦労あるんですが、ヘルプに記載がある接頭語に使えるフォーマットを、こちらに引用しておきます。

Winshotの接頭語に日付(yyyymmdd)を入れる

接頭語
自動保存する場合のファイル名の先頭に付く共通の文字列を指定します。

接頭語には固定文字列のほかに日時の情報を埋め込むことが可能です。以下の文字列を接頭語に含めることにより、日時情報に展開するようになります。大文字小文字を識別しますので注意してください。
指定文字列 展開形式
\F 西暦4桁(0000~9999)
\Y 西暦の下2桁(00~99)
\M 月(01~12)
\D 日(01~31)
\H 時(00~23)
\h 時(01~12)
\T 午前/午後(午前/午後)
\t AM/PM(午前/午後)
\m 分(00~59)
\s 秒(00~59)

たとえば、接頭語に「(\F年\M月\D日 \T \h時\m分\s秒)」とした場合、保存されるファイル名は「(2003年5月31日 午後 9時50分)00001.BMP」のようになります。

ということです。

私の場合は「\F\M\D_\H\m\s」として、シーケンス桁数を「0」にしています。

以上です。

1月 252016
 

http://www.oracle.com/jp/technologies/virtualization/oraclevm/overview/index.html

ちょっとしたことで、Oracle VM Serverの学習を始めました。感覚的にはVMware ESXiのようなハイパーバイザー型の仮想化専用OSとのことで、アレルギー無く操作できるとは思うんですが、操作感覚を覚えておきたく学習環境にインストールを試みています。

Oracle VM Serverの管理に必要なOracle VM Manager(ver3.3.3)のインストールを行っているんですが、マニュアルに記載のあったOracle Linux 5/6に該当するOracle Linux 6.7をインストール環境として、Oracle VM Managerのインストールを試してみたら以下のようなエラーに遭遇した。

Oracle VM Manager can only be installed on a 64 bit Oracle Linux version 5.5 and higher.

Oracle VM Managerは 64bit のOracle Linux 5.5 以上の環境でのみインストールできます。ってこと。でも、実行している環境は64bitのOracle Linux 6.7の環境。明らかに5.5以上の環境なのに進まない。。

少しググッテみたとことろ以下のURLにたどり着きました。

Oracle VM manager Installation
https://community.oracle.com/thread/3777595?start=0&tstart=0

上記リンクを見ると、ズバリ同じ悩みを抱えている人がいました。

when I am trying to install OVM Manager on Oracle Linux server 6.7, getting below issue. It says we can install on oracle linux server 5.5 or higher, and I am trying on Oracle linux server 6.7, but it gives this error. Do I miss something here, please let me know.

私の悩みとまったく同じで、OVM(Oracle VM) ManagerのインストールをOracle Linux 6.7上にしてみたら、5.5以上じゃないとだめだよーって言われたってことです。おなじですね。

で、このページを読み進んでいくと以下の方法で回避できるという説明がありました。

The workaround below can be used until the fix is available:

Rename /etc/oracle-release temporarily to /etc/xx_oracle-release.orig

Important: After the upgrade, the file should be renamed back to its original name /etc/oracle-release

ここでは、「/etc/oracle-release」というファイルを「/etc/xx_oracle-release.orig」に名前変更すればインストールが出来ると記載があります。インストールが終わったら元に戻すように、とも記載がありました。

不思議なことに、 /etc/oracle-release を /etc/oracle-relese.back などに名前変更した場合は通りませんでした。

どのような背景かはわかりませんが、上記のとおりの名前でファイルの名前変更を行うとインストールを行うことが出来ました。名前の変更は以下のコマンドで行いました。

回避方法

# mv /etc/oracle-release /etc/xx_oracle-release.orig

ちなみに、この問題は次のOVM Managerのリリースの際に修正されるようです。

 

参考になりましたら幸いです。

 

以上です。

1月 252016
 

久しぶりに悩まされました。
何の拍子からかはっきりしていないのですが、急にdigコマンドが使えなくなったのと、DNS(named)の起動が行えなくなってしまって、解決に1日かけてしまいました。

digコマンドはnamedコマンドを実行した際に、以下のようなエラーが表示されていました。

# dig
dig: symbol lookup error: dig: undefined symbol: isc__socket_sendtov2
# named
named: symbol lookup error: named: undefined symbol: dns_dyndb_arguments_create

意味が分からないですよね。
named(bind)もdig(bind-utils)も、yumリポジトリ(base)からインストールしているので、ソースに不足があったとか?なんか変なことが起きていることは考えられないし、そもそも今まで使えていたものが急に使えなくなるのがおかしい。

bind関連のパッケージをすべて削除して、再インストールすることもやってみましたが解決しませんでした。

試しに、ソースRPMからビルドして、インストールしてみましたが、それでも解決しない。。。

私の環境は以下の通り

# rpm -qa | grep ^bind | sort
bind-9.8.2-0.37.rc1.el6_7.5.x86_64
bind-libs-9.8.2-0.37.rc1.el6_7.5.x86_64
bind-utils-9.8.2-0.37.rc1.el6_7.5.x86_64
#
# uname -a
Linux infra.secure-i.jp 2.6.32-573.12.1.el6.x86_64 #1 SMP Tue Dec 15 21:19:08 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
#
# cat /etc/redhat-release
CentOS release 6.7 (Final)
#

ここでは、解決に至った右往左往は説明は省いて、解決方法を記載します。
引き続き次のページに解説します。

12月 272015
 

mushさて、2015年も終わろうとしている12月26日のことです。
以前作成した記事にコメントをもらいました。

すみませんが、6.0の場合の設定を教えていただけないでしょうか。

たけとさん、コメントありがとうございました!!!

そうですよね~ 6.0での方法知りたいですよね?(汗

ということで以下にその方法を10枚の画像とともに説明いたします。

Android6.0にて、アプリをインストールせずに電話誤発信を防ぐ簡単な方法の巻

  1. 電話アプリを起動します
    01
  2. 右上の点々を押して、そこから「設定」をタップします
  3. 設定の画面では「通話」をタップします
    03
  4. 通話設定の画面では「通話アカウント」をタップします
    04
  5. 通話アカウント設定の画面では「SIPアカウント」をタップします
    05
  6. 右上の「+」をタップし、各項目を適当に入力します
    06

    • ユーザー名: 12345
    • パスワード: 123
    • サーバー: 12345
  7. 入力が終わったら右上の「保存」をタップします
    07
  8. 登録したでたらめのアカウント情報が「通話着信OFF」になっていることを確認し画面左上の「←」をタップします
    08
  9. 「発信先」の項目にて、”最初に確認する”になっていることを確認します
    もしなっていない場合は、タップし設定してください
    09
  10. 最後に、試しに「117」にダイヤルしてみましょう。画像のような確認画面が表示されれば設定完了です。
    10
    電話をする場合には、SIMカードのアイコンがあるもの、上の例の場合だと「Y!mobile」をタップすれば電話発信がされます。

以上です!

 

10月 242015
 

unnamedGmailの基本機能の一部として、外部メールサーバ(会社のメールサーバとかHotmailとか)にあるメールをPOPで取得しGmail上で管理する機能があります。

Gmail で他のアカウントのメールを確認する
https://support.google.com/mail/answer/21289?hl=ja

しかしこの機能には、弱点があります

外部メールサーバからメールを取得する頻度・間隔を設定できないのです。手動ではありますが、Gmailの設定からクリックすることでメールを受信することはできますが、時には15分、長い時では50分もの間外部メールサーバからメールが取得されないことがあります。この間隔は、該当のアカウントに届くメールの頻度等によって自動で調整されているようなのですが、とにもかくにもメールがすぐに確認できないのは困ります。

そこでいろんな手段を考えました。。本当にいろんな手段です。
Gmailを卒業して自身でWebメールが使えるサーバを用意するのも考えました。

でもGmailは捨てられなかった

どこでもアクセスできるし、下書きがデバイス間で共有できるし、メーリングリスト経由で重複配信されているであろうメールを整理してくれたり、フォルダに色を付けれたり、迷惑メールフィルタ機能があったりと、ここ数日でGmailから離れられない自分を実感しました。

そこで2日間の苦闘の末にたどり着いた方法をここで皆さんに紹介します。

getmailで受信し、メールをGmailに転送する!

ここまで来てここでいうのも失礼なのですが、これには何かしらのサーバーが必要です。サーバーではメールサーバーも動いていないといけません。このあたりのハードルがすでにクリアできているものとして説明します。

getmailってのは、POPやIMAP等を用いて外部メールサーバからメールを取得してこれるものです。複数のアカウントを1メールサーバでまとめて管理するときなどに便利なコマンドです。

一般的にはgetmailで取得してきたメールをサーバ内のメールボックスに格納するのですが、今回は外部に転送する方法で夢を実現したいと思います!

まずはgetmailをインストール

# yum -y install getmail

次にgetmail用のディレクトリの作成とレシピファイルを作成します。

# mkdir ~/.getmail
# vi ~./getmail/getmailrc
[options]
verbose = 1
delete = true
read_all = false
# 動作ログをとるなら。取るなら取るでログローテの
# 設定も忘れないように!
# message_log = ~/.getmail/getmail.log

[retriever]
type = SimplePOP3Retriever
server = POPしたいサーバー
username = POPアカウント
password = POPパスワード

[destination]
type = MDA_external
path = /usr/sbin/sendmail
arguments = ("-f", "%(sender)", "-i", "-bm", "転送先のGmailアカウント")
user = nobody
group = nobody

上記の各設定に関して雰囲気でわかると思うんですが、簡単に説明します。

options, retriever, destinationの3部分から構成されています。基本的なオプションと、メール取得方法、取得したメールの配信先を指定しています。詳細は以下のgetmailのマニュアル(英語)を参照してください。

getmail documentation
http://pyropus.ca/software/getmail/configuration.html

はい、ちょっと横道にそれましたが、設定の動作確認を行いましょう。

1.該当アカウントにメールを送る

2.getmailコマンドで確認

# getmail -v

この時点でメールが受信されて転送されている動きが「-v」のオプションのおかげで見えると思う。

3.メールログを確認する

# tail /var/log/maillog

4.転送先のGmailアカウントにてメールの受信を確認

最後に

getmailの動作を自動で行うようにcronの設定を仕込みます。

# crontab -e
* * * * * /usr/bin/getmail > /dev/null 2>&1

 

これでおわり!

 

毎分メールを確認しにいって、メールがあれば転送してくれる設定が完了しました!

 

以上です。

10月 232015
 

MariaDB久しぶりにDTIからレンタルしているVPSにてyum updateしたあとに、MariaDBに接続しようと思ったら接続ができなかった。

Server is running in –secure-auth mode, but ‘root’@’localhost’ has a password in the old format; please change the password to the new format

サーバは「–secure_auth」モードで動いてるけど、ログインしようとしている「root@localhost」は古いフォーマットのパスワードを利用してるよ!パスワードを新しいフォーマットに変えてごらん、ほら♪

というメッセージです。

同じ状況に遭遇するであろう方のために原因と解決方法を書きたいと思います。

原因

原因は、MariaDB 10.1.6まではデフォルト無効であった「secure_auth」オプションがMariaDB 10.1.7以降でデフォルト有効になったため、今までold_password形式で利用していたアカウントからのログインを拒否するようになったためです。

参考:MariaDB:Server System Variables

解決方法

その1

MariaDBの起動オプションに「skip-secure-auth」を追加してMariaDBを再起動する。
そうすると、今まで通りMariaDBにアクセスできるようになる。
追加する先は「 [mysqld] 」配下。

まぁ、MariaDBの設定で「bind-address=127.0.0.1」にしているし、
iptablesでも3306ポートは閉じているからこの運用~ でもまったく問題ないような気がする。

その2

上記その1の対策では物足りない方へ、「secure_auth」を有効にした状態で正しく利用するための方法。

手順1:解決方法その1を利用して、とりあえずMariaDBにアクセスできるようにする。
手順2:以下のコマンドを実行し、root(もしくはログイン出来なくなっているユーザ)のパスワードを更新する。

ariaDB [mysql]> UPDATE mysql.user SET Password=PASSWORD('現在のパスワード') WHERE User="ユーザー名";

以下実行例:

ariaDB [mysql]> UPDATE mysql.user SET Password=PASSWORD('MyPassw0rd') WHERE User="root";

手順3:手順1での「解決方法その1」の設定変更をロールバックし、MariaDBを再起動
手順4:mysql -u root -p で接続できることを確認

もう少しエンジニアらしい動きをしてみたい方は、以下のコマンドを用いてパスワード変更前と変更後にどのように変化しているかを見れるといいですね。

MariaDB [mysql]> select User,Password from mysql.user where User="root";

 

以上です。

9月 162015
 

Bashシェルスクリプトを使ってヌメロン(Numer0n)を作ロン♪ということで作ってみました。

事前にコンピュータが定める4桁の数字をあてに行くゲームです。
Wikipedia:ヌメロンのルールはWikipediaをご参照ください。

今回作成したものは、一回ごとに継続して挑戦するかを確認する仕様となっています。
もしy/nでの回答を行わずに継続して実行したい場合は「-y」オプションをつけてください。

実行例:

# ./numeron.sh
---------------------------------------
Please choose 4 numbers from 0 to 9 and type in as 4 digit number [eg.1234]: 1234
---------------------------------------
0 eat 1 bite
continue?[y/n]: y
---------------------------------------
Please choose 4 numbers from 0 to 9 and type in as 4 digit number [eg.1234]: 1238
---------------------------------------
0 eat 2 bite
continue?[y/n]: y

「-y」オプションを利用した場合

# ./numeron.sh -y
---------------------------------------
Please choose 4 numbers from 0 to 9 and type in as 4 digit number [eg.1234]: 1234
---------------------------------------
0 eat 3 bite
 ----> try again
---------------------------------------
Please choose 4 numbers from 0 to 9 and type in as 4 digit number [eg.1234]: 5234
---------------------------------------
0 eat 2 bite
 ----> try again

シェルスクリプトの記述は以下のとおり

#!/bin/bash

arr=({0..9})
declare -a kotae
for i in `shuf --input-range=0-$(( ${#arr[*]} - 1 )) | head -4`
do
    kotae=("${kotae[@]}" "${arr[$i]}")
done
ks=`echo ${kotae[@]} | sed -e 's/ //g'`

# cheat
#echo $ks

a="y"
while [ $a == "y" ]; do
    userInput=''
    while [ -z ${userInput} ] ; do
        echo "---------------------------------------"
        echo -n "Please choose 4 numbers from 0 to 9 and type in as 4 digit number [eg.1234]: "
        read userInput
        echo "---------------------------------------"
        dup=`echo $userInput | grep -o . | sort | uniq -c | grep -v "1 [0-9]" | wc -l`
        if ! [[ $userInput =~ ^[0-9]{4}$ ]] || ! [ $dup -eq 0 ] ; then
            echo "not good input... try agin!"
            userInput=''
        fi
    done
    u=(`echo $userInput | grep -o .`)
    if [ $userInput = ${ks} ]; then
        echo " 4 eat!! GREAT!!! "
        exit
    else
        E=0
        B=0
        for n in {0..3}; do
            if [ ${u[$n]} = ${kotae[$n]} ]; then
                E=$((E+1))
            elif [ `echo ${ks} | grep ${u[$n]}` ]; then
                B=$((B+1))
            fi
        done
        echo "$E eat $B bite"
    fi
    if [ "$1" = "-y" ]; then
        echo " ----> try again"
    else
        echo -n "continue?[y/n]: "
        read a
    fi
done

スクリプトのダウンロードはこちらからどぞ

numeron.sh