trippyboy

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

7月 142015
 

CentOS6.6にてswatchを再起動したときに以下のようなログが
/var/log/swatch/swatch.logに出力される場合の話

There were no useful entries in the configuration file. Exiting

これは、/etc/swatch/*.confに該当する設定ファイルにて(たとえば/etc/swatch/test.conf)
何も定義していない場合に表示されるログです。

他に正しく記述があるファイルがあれば、問題なくswatchは起動しますので

# ps auxww | grep swatch | grep -v grep

とか

# ps -ef | grep swatch | grep -v grep

などで確認してみましょう。

ネットで検索してもヒットするページがなかったので記事にしてみました。

 

おしまい。

5月 102015
 

CentOS6にてVirtualHostをapache以外のユーザーで実行させたい。
やりたいことはずばりこれだ!

1Webサーバにて複数のViartualHostを公開するときに、VirtualHost単位で管理者を分け、他のVirtualHostの操作はできないようにさせたい

今回はFTPによるWeb公開ファイルの操作を行いたいという依頼を受けて方法を探してみたら、めちゃくちゃ簡単な方法があったので共有させて頂きます。

1. epelリポジトリを追加

yumリポジトリへのepelリポジトリの追加を行っていない方はこちらの記事を参考に追加

2. httpd-itkをインストールする

# yum -y install httpd-itk
# which httpd.itk
/usr/sbin/httpd.itk

3. httpd起動プログラムを置き換える

/etc/sysconfig/httpdを編集し、起動プログラムを上記2で確認した/usr/sbin/httpd.itkに変更する。

# cp -p /etc/sysconfig/httpd /etc/sysconfig/httpd.org~
# echo "HTTPD=/usr/sbin/httpd.itk" >> /etc/sysconfig/httpd

4. デフォルトの起動ユーザーがapacheであることを設定ファイルとして明記

# vi /etc/httpd/conf.d/itk.conf
<IfModule itk.c>
    AssignUserId apache apache
</IfModule>

5. 既存のVirtualHostの設定内に管理を希望するユーザIDとグループを指定

以下はユーザ名とグループ名が「web01」の場合

<VirtualHost *:80>
 ServerName example.com
 DocumentRoot /peth/to/web/root
 AssignUserId web01 web01
# ~省略~
</VirtualHost>

6. PHPの利用がある場合

/etc/httpd/conf.d/php.confに以下の記述を追加

<IfModule itk.c>
 LoadModule php5_module modules/libphp5.so
</IfModule>

8. Webコンテンツの所有者と権限を変更する

# chown -R web01:web01 /peth/to/web/root
# chmod o-rwx /peth/to/web/root

7.httpdを再起動する

# service httpd restart

8.VirtualHostにアクセスする

問題なくアクセスできることを確認してください。

9.アクセスした状態で ps コマンドで指定のユーザで実行されていることを確認

# ps auxww | grep web01

これで完了です。

今後はVirtualHost毎に異なる管理者をつけて運用ができますね。

 

以上です。

2月 262015
 

-bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)

こんなエラーがでてあせった。
というのも、ローカルのPCのテキストエディタで編集したものをTeraterm経由でSSH接続してviでこぴぺしたら、激しく文字化けしたので気づいた。

何かがおかしい と。

localeコマンドを実行してみたら以下のとおりエラーが3行表示された。

どうやらロケールを設定するファイルがなくなっているらしい。

[root@vps2 mail]# locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=

さらに、su – したときもこんな感じでエラーがでる。

-bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)

何でだろう。。 yum updateしたらこんなになった気がする。
個人的にlocaleファイルの軽量化をしているせいかなぁ。

そんな時は vzdummy-glibc の再インストールをすることで直る。
どうやら「/usr/lib/locale/locale-archive-rpm」というファイルへのリンクがおかしくなったとか、ファイルそのものがおかしくなった(というかしてしまった)場合におきるみたい。

[root@vps2 ~]# yum info vzdummy-glibc
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.tsukuba.wide.ad.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
インストール済みパッケージ
名前 : vzdummy-glibc
アーキテクチャ : noarch
バージョン : 2.12
リリース : 1.7.el6
容量 : 95 M
リポジトリー : installed
提供元リポジトリー : vz-base
要約 : Package contain locale-archive that regenerated by glibc in post-install
ライセンス : GPL
説明 : Package contain locale-archive that regenerated by glibc in post-install
[root@vps2 ~]#
こいつをインストールすればOK!
[root@vps2 ~]# yum -y reinstall vzdummy-glibc

以上