月別アーカイブ: 1月 2016

mysql管理小物:sqlファイルを平行インポートする

DBごとにMySQLダンプしておいたファイルを平行でインポートさせる

DB名.sql.gzと言う名前でgz圧縮して置いてある前提。

 mydumpimport *.sql.gz
 みたいに実行すれば、当該ファイル全てをmysqlに流し込んでくれる。
 $!でインポート実行したPIDを配列に記録して、PIDリスト付きpsで動いているプロセスを確認して指定値以上のプロセスがあればsleepして、減ったら再度実行していくだけ。
 サーバの能力的に同時実行出来る性能ならwhileのgt右辺を調整して実行すると便利。
 Xeon E5 2way + ioDrive環境なんかだと20くらいでもシリアルにやるより遙かに早かった。

(207)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

mysql管理小物:mysqlの全テーブルをOPTIMIZE TABLEやREPAIR TABLEする

 MySQLをリカバリしたり障害から復元したりしたとき、テーブルのインデックスが所々死んでいたりしてOPTIMIZE TABLEとかしたいときに使う小物。

 第一引数を渡したmysqlからinformation_schemaのテーブル一覧を引っ張り出して、ループで”第二引数+DB名.テーブル名”のコマンドを、第一引数を渡したmysqlに投げ込むだけ。
mybulktblcmd ‘-hlocalhost -uroot -ppassowrd’ ‘OPTIMIZE TABLE ‘
 みたいに実行すれば、mysql,information_schema,performance_schema以外のDB上にある全てのテーブルにOPTIMIZE TABLEを実行できる。

(380)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

DiginosStick(ほぼComputeStick)をUbuntu化する

 最近はやりの低価格省スペースPC、スティックPCをUbuntu化する話。
 Intel ComputeStickとかが定番で、国内では1万円付近でドスパラのDiginosStickが買えるのでそれをUbuntu化した。

 基本知識。
 CPUは大抵Atom Z3700シリーズで、主記憶1~2GB、メインストレージはeMMCで16~64GB、8インチWindowsタブレット端末からディスプレイとセンサー、バッテリー周りを取っ払ってHDMIに直挿し出来るようにした端末。 タブレットレベルなのでファンレスか、極低速ファンが付いているだけ。
 省エネ省スペース低価格を実現している一方で、普通のPCとはちょいちょい違ってハードルが高い。
 まず、BIOSモードは付いていない物が多い。 UEFI限定、その上、32bitUEFI限定(BIOS互換モード無し) UEFIのPCでも昔のOSが起動するけど、あれはUEFIのBIOS互換モジュールで動作しているだけなので、それが無いこのマシンでは大抵のレガシーなOSがブートできない。

 ストレージが一般的なsdじゃなく、mmcblkデバイスになっていて、組み込みLinux的な部分もある。 インストール出来るOSはWindows8/10の32bitと、一手間加えたLinux位の物である。
 この端末にLinuxを入れる場合、一番簡単なのはFedelet(Fedora + tablet)で検索すると出てくる、Fedoraをカスタムしたイメージ。 こいつなら特に手間を加えること無く導入できる。
 しかし、管理の都合でUbuntuが利用したいので今回はUbuntu 14.04.03LTSを導入した。
 Server版をインストールしたいところだが、ネットワークインタフェイス周りに難があり、Server版はインストールの難易度が異常に高い(Server版の導入は、USBスティックから導入する場合、ネットワーク接続が有効じゃ無いと途中で止まってしまうのだが、こいつはUSBしかNICを入れる場所が無いのでお金がかかる上にかなり面倒) Desktop版であれば割と素直に導入できる(ネットワーク接続無し導入可能、その上Serverでは認識しないCDC Etherデバイスが認識される)ため、今回はデスクトップ版で導入してX周りを無効化するという手順で基本導入を実施した。

 材料
Diginnos Stick DG-STK1B
セルフパワー USBハブ
USB NIC PLANEX USB-LAN100R
LittleFAN40U
・USBメモリ 2GB以上
・USBキーボード
・USBマウス

 初期作業。
 Ubuntuをダウンロードする。 必ず64bit(amd64)をダウンロードする。 主記憶容量として2GBなので32bitの方が適切に思えるが、EFIブート機構が64bit版じゃ無いと動かない。
 bootia32.efi(32bitEFI用のローダー)を作成するか入手する。 今回はこちらから頂いた。
 インストール用USBメモリを作成する。 Windows環境なら、UUIを利用。
ダウンロードしたファイルを実行し、ディストリビューション選択でUbuntuを選び、ダウンロードしたISOを選択し、USBメモリのドライブを選んで実行。
完了したら、USBメモリの/BOOT/EFI/に、bootia32.efiを投げ込む。
 これでとりあえず準備完了、次にDiginosの方を準備する。

 ディスプレイ接続など一般の初期作業は全部完了済みとする。
 Diginosにバスパワーでデバイスを接続するとインストールに転けることがあるので、必ずバスパワーハブを接続して給電した状態で行う。 ハブに、USBメモリ・キーボード・マウス・NICを接続する。
 Secure bootを無効化する。 キーボードのDELキーを押しっぱなしで電源ボタンを押してEFIの管理画面に入り、SecurityのSecure bootをDisableにする。 併せてBootの優先順位でUSBメモリの順位を上げておく。
ついでにCPUメニューにある電源管理をEnergy EfficiencyからCustomに切り替えてTurboboostを有効化しておくと動作クロックが一気に上がって幸せになれるが、この場合は材料一覧にあるファンのような物を取り付けておかないとサーマルスロット動作で結局すぐ遅くなるのでほぼ無意味。 設定が済んだらSave&Exit
 Grubメニューが出ればココまでの手順は成功。 出なければ何かが間違っているのでやり直す。
 GrubメニューでInstallを選択。 Thinkのトラックポイントキーボードだと操作できなかった(キーボードとマウスが独立したデバイスが必要)
 UbuntuGUIが起動するまで待つ。 USBハブがパスパワーの場合など、途中で止まることがあるので数分動かなかったらおとなしくセルフパワーハブを買いに行こう;(これで数時間はまった)
 UbuntuGUIが起動すれば普通にインストールしていくのだが、途中で/dev/mmcblk0rpmbのアクセスエラーと言う警告が出ることがある。 この領域は普通のIO手段でアクセスできない領域だが、書き換える必要は無いのでIgnoreで飛ばす。 領域の設定をカスタムで行うとインストールに失敗することがある。 ダメならとりあえずUbuntu任せにパーティショニングして導入後に何とかしよう。
 導入が完了した後、Grubを書き換える必要がある。 最新のリポジトリではパッケージで提供されているため、インストール時にネットワークから最新リポジトリを選択して、grub-efi-ia32パッケージを入れられれば入れる(内蔵の無線LANは動作しないので、材料に書いてあるUSB NICを入れておくと便利。 こいつは標準のCDC_Etherで動作するデバイスなのでUSB NICの中では一番使いやすい系統)

 インストール時にgrubパッケージを入れられなかった場合は、インストール完了後の再起動時に再度USBメモリから起動してGrubメニューでコマンドラインに入り(メニューでc)、インストールしたUbuntuをロードしてやった上でgrub-efi-ia32を導入する。
ロードパラメータはUbuntu任せにパーティショニングした場合

 ※~部分は導入した物により異なるので、前部分を打ち込んでTabキーで保管させるのが手っ取り早い

パラメータを設定したらboot
無事に内蔵ストレージからUbuntu GUIが立ち上がったら、Terminalを出して、 

を実行してシャットダウン。

 USBメモリを外して再起動してUbuntuが無事に立ち上がればOK。
 最後にサーバ利用のためにXを止める場合は、/etc/default/grubを編集して、GRUB_CMDLINE_LINUX_DEFAULTの項目にtextを追加してやって、grub-set-default を実行して再起動してやればXが無い状態で起動してくる。
 デフォルトで占有メモリ200MB程度で空きが1.7GBくらいあり、/パーティションも22GBくらい開いているのでBBBやRPi2サーバよりは遙かに快適、ML110G7には遠く及ばない程度の使用感になる。

 内蔵のMicroSDスロットについては、起動時にSDカードを挿しておけば、/dev/mmcblk1デバイスとして認識するため、sambaを入れてちょっとしたファイル置き場などとして使うとか、バックアップ用に使うことも出来る。

 PLANEXのUSB NICについては、GbE対応版の1000RもCDCデバイスなので、そちらを複数挿してやればそこそこ性能のルータにすることも出来るし、色々遊べるだろう。

追加
・起動時にEFIシェルが表示される場合(黄色文字が所々あるシェル)
>EFIブートの登録がうまくいっていない。
EFIシェルで

を実行すればとりあえずGrubメニューまで行けるはず。 このファイルが無いとか言われる場合は、grub-efi-ia32の導入に失敗しているので、インストール時にGrubパッケージを入れられなかった場合の手順を実行する。

この手順で起動できた場合は、EFIにブート情報を登録すれば次回からは自動起動できるようになる。
登録するにはUbuntu上で

を実行する。
-c:BOOT情報の作成
-g:DISK情報を強制的にGPTに
-d:ブートデバイス
-p:パーティション番号(このパーティション番号は、EFIファイルが入っている領域のパーティション番号であって、Linux本体パーティションではない)
-L:ラベル設定
-w:署名書き込み
-l:ローダーのパス(デバイス:パーティション上のパスで、EFIではDOSタイプのパス形式なので/ではなく\を使う。 コマンドラインで\がエスケープされるから二重\\)
このコマンドを実行するとEFI管理画面BOOTタブのBOOT一覧にUbuntu 14.04LTS efi32が登録されて自動起動できるようになる。

・動作中に応答停止する:dmesgを取っている場合 mmcblk0 の-110エラーが記録される。
>eMMCの高速モードで異常が発生している。
 ハードウェア・ファームウェア上のエラーなのか、Linuxの実装上のエラーなのかわからないが、Windows上ではエラーにならないので相性。
EFI>Advanced>LPSS>eMMC DDR50/HS200を無効化すると改善する。
 それでもダメなら、カーネルパラメータにintel_idle.max_cstate = 0を設定する(CPUのCステート切り替わり時に不安定になる)

UnixBenchを取ってみた
5.1.3の4コアモード、左がPi2のリザルト、右がDiginosのリザルト、右端はDiginosをPi2で割った値。
全項目で2倍以上、項目によっては3倍を超えて全体で2.83倍と言うことで快適度は桁違い。 

  Pi2 Stick Pi2:Stick
Dhrystone
2 using register variables      
11802735.6 31554190.6 2.67
Double-Precision
Whetstone                
1988.5 5351.2 2.69
Execl
Throughput                          
1359.5 4435.9 3.26
File Copy
1024 bufsize 2000 maxblocks     
115667.5 320332.9 2.77
File Copy
256 bufsize 500 maxblocks       
32669 86472.9 2.65
File Copy
4096 bufsize 8000 maxblocks     
313050.3 910785.4 2.91
Pipe
Throughput                           
698307.4 2217670.5 3.18
Pipe-based
Context Switching              
122975.8 275185.9 2.24
Process
Creation                          
2890.8 9634.7 3.33
Shell
Scripts (1 concurrent)              
2536.4 7885.2 3.11
Shell
Scripts (8 concurrent)              
333.3 1069 3.21
System
Call Overhead                      
1579952.2 3515266.5 2.22
                                           438 1239.2 2.83
       

※Windows10に戻す場合
普通にWindows10 32bitのUSBメモリを挿して電源ON、UEFIの設定画面でBOOTオーダーをUSBメモリ優先にしてやれば何も気にせず導入できます。
ドライバ類については、基本ドライバはComputeStickの物を導入、WLANやBTについてはChuwi Hi8の物を入れてやれば動きました。
ACPI\BCM27E4にBluetooth、02D0\A9A6\FN_1にWiFi SDIO、02D0\A9A6\FN_2にbcfn2を当ててやればOK

(7866)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

Windowsで動くサードパーティRDPクライアント

 Windowsをリモート管理するのに必須と言っても良いツール、’リモートデスクトップ接続’(WindowsRDPクライアントとか、MSTSC.EXE等)と言うヤツだけど、こいつが立ち上がらなくなることがある(接続を実行した瞬間にリモートデスクトップ接続は動作を停止しました、とか言われる・・・)
原因は様々で、組み込んでいるドライバとか、常駐系アプリの都合とかで起きるんだけど、ドライバを組み込まないわけにもいかないし、RDP専用にマシンやVMイメージを用意するのもアレだしと言うところで代替ソフトは無いかと探してみる。

 とは言っても、Windowsにはずっと標準で入ってきているソフトなのでそんなにそこら中にあるわけも無く、探して見つかったのはFreeRDPと言うヤツ。 Xとかで使うヤツだけど、Windows用ビルドを公開しているところがあった。
 純正と違って、接続先のアドレスをコマンドラインで渡す方式で、そのまま実行しても一瞬で終了する。 ショートカットを作って、コマンドラインのところに /v:サーバアドレス みたいに付けてスタートメニューにでも用意しておくと良いだろう。
 これを使って無事に管理できるようになった。 LinuxとかMacとかのビルドもあるから覚えておくと良いだろう。

(1503)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

無線LANもdot1xにした

 前回、有線LANをdot1xにしたけど、本命の無線LANのdot1x化を実施。
 と言っても、対応装置を使えば何もすることは無かった。 最初、手元に余っていたBuffalo WHR-600Dにdd-wrtを導入してdot1x設定を行っていくらやっても繋がらず・・・追いかけていったら単純に当該のdd-wrtはメニューにあるけどうまく動作していなかった。 コンソールで入って中にあったradclientで試すと正常に動いたが、メニューでいくら設定してもradius認証のパケットが飛ばなかったので、無線側の実装問題があるのかもしれない。
その後、更に古いがハードウェア的に強いNetgearのWDNR4500にdd-wrtを導入してみたところ、2.4GHzではdot1x出来るが5GHzではdot1x出来ない(NICがそれぞれに付いていてドライバが異なるので実装の問題だろう) また、こいつは450Mbpsの11nまで対応だし、そもそも消費電力が非常に高い(12V5AのACアダプタ付属)と言うことで、結局、dot1xに正式対応した機材を購入した。

 選定した機材は、ASUSTek RT-AC1200HPと言うヤツ。 5000円台の低価格ながら11ac 866Mbps対応(11nは2.4/5GHzとも300Mbpsの2×2仕様)でdot1x対応品。 付属のACアダプタは1A品で、単純に先のNetgearの1/5、電力計でチェックしたが866リンク状態のローカルファイル転送(40MB/s程度)でも10W以下で動く。

 一般的なブランド品でdot1x出来るヤツは2万くらいするのを考えると非常にコスパがいい。 ただ、値段なりに弱点はあって、CPUパワー的には先のNetgearと大差ない(866状態で適切なファイアウォールポリシーを組み合わせたルーティングなどさせる余力は無い)、WANインタフェイスだけGbEでLANインタフェイス・スイッチはFE等はあるけど、我が家は既存のGbEスイッチとIX2215等がそろっているから、単純に無線LAN APモードとして使うため問題が無かった(APモードであればWAN側GbEインタフェイスもブリッジされるため)
 AC1200HPでは何も考えずに、電源投入、初期設定を適当に済ませてから管理設定でAPモードに切り替え、再起動後に無線LAN設定画面でWPA2-Enterpriseを選択して、RADIUSサーバ設定画面でサーバのIPとSecretを入れて再起動。 何もせず、普通にRADIUS認証が飛ぶようになった。
サーバ側は前回のスイッチに設定した通りで問題なくPEAP等もそのまま動作して、すんなりいってくれた。 クライアント側はWindows10/8.1U1/7でBroadcom/Intel/Realtekにて検証。
 あとはしばらく試験運用して安定性など問題なければ、そのまま職場のAPを全部こいつでリプレースしていきたい。
 ただし、RADIUSサーバが停止すると致命的なので、RADIUSサーバのバックアップとしてDiginosStickかRPi2あたりにRADIUSサーバを構築して自動切り替え動作させたいところ(このAPではRADIUSのSlaveが登録できなかったため、バックアップ機でマスタサーバにRADIUS認証を定期的に実行して認証に失敗したらIPを乗っ取るようなスクリプトを作るか、バランサーかNATか何かを噛ませて切り替えてやる必要があるな)

(707)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

802.1x(dot1x)認証を設定してみた

 有線LANのポート認証や無線LANの接続認証に使えるIEEE802.1x、いわゆるdot1x(以下.1x)の認証設定をしてみた。
 .1xは無線LANのWPA-EAPとか、有線LANのLEAPとかPEAPとかの設定で使える認証で、装置のネットワークに接続した時に通信を許可するのに証明書やID/Password認証なんかが利用できるシステム。
 いずれにしても装置の対応が必要で、無線LANでは業務向け装置、有線LANもマネージ・簡易マネージスイッチなどが必要になるけど、クライアント側はWindowsなんかは標準で繋がる。
 企業ではWindowsのActiveDirectoryと統合したRADIUS認証システムをベースにして、ユーザがログインするAD情報でネットワーク接続レベルの認証も行えるようになるため、パスワードベースの認証を利用したとしても、ユーザ単位で設定できるから、退職する人が出たときにPSKを全部書き換えたりせず、AD上で当該ユーザを凍結してしまえば他のユーザはそのまま利用できるなど利点が多い。
 また、有線LAN装置の多くは認証が成功したときと失敗したときでVLANを変えたり出来るので、会議室に有線LANポートを用意して、内部ユーザが接続すると社内ネットワークへアクセスして、ゲストが接続するとインターネットアクセスだけ出来るようにするなどの構成も可能で利便性が高い。

 今回は、自宅のエッジスイッチであるNetgear GS108Tv2と、CentOS7.0サーバにFreeRADIUS、ThinkPad E450(Windows10Pro)を用いて実験した。


Netgear Plusスイッチ GS108T

 まずは認証基盤を用意する。
 今回は、実験的なネットワークなのでCentOS7.0を入れたComputeStickにFreeRADIUSを導入。

※テキストベースユーザリストを使う場合、以後ユーザ情報を更新したらservice radiusd reloadを実行して情報を更新する。

認証できるかローカルでテストする。

・GS108Tv2の設定
NETGEAR GS108T-4
security > port authentication > advanced > port authentication > port control > authorized / auto
RADIUSサーバがあるポートをAuthorizedにする(=認証しなくても認証済みとして扱う、これをしないと認証サーバ自体と通信できない。 また、機器が直結で無いポートもAuthorizedにする=ポート認証はエッジの仕事)

NETGEAR GS108T03
security > port authentication > advanced > port authentication > 802.1x configuration > port based authentication > set enable
ポートベース認証を有効化する(上の設定とセット)

NETGEAR GS108T
security > management security > radius > server
RADIUSサーバを設定する、IPアドレス、ポートはデフォルト、Secret ConfiguredでSecretにRadiusサーバに設定したSecret(今回はsecret-with-switch)を入れてやる。

NETGEAR GS108T-2
security > authentication list > defaultList : radius – local – none
認証にRADIUSを使う設定

全て設定が完了したらスイッチを再起動。

・PCの設定
 WindowsではサービスでWiredAutoConfigurationを有効化する(.1xに必要なサービス)
 有線LANのプロパティを開くと認証タブがあるので、開いて”802.1x認証を有効にする”チェックをオンにして、Microsoft:保護されたEAP(PEAP)を選択する(デフォルトではWindowsのログインユーザ・パスワードを自動で認証情報に使う様になる) この状態で設定画面を閉じると直ちに.1x認証を実行する。 デフォルト状態では、”サーバーのIDを検証できません”と言う警告が出る。 これは、PEAPの設定にある、”証明書を検証してサーバーのIDを検証する”が有効になっているため、当該サーバが検証できなかったことによるメッセージで、今回はテストなので警告画面で許可を行って接続する。
サーバーのID検証をスキップする設定をした場合、意図しないネットワークに認証情報を送信したり、接続したりしてしまうセキュリティリスクとなるため、本格運用時にはopensslを使って証明書を発行するか、Web用のSSL証明書を流用して登録する。

 証明書の設定
 設定は/etc/raddb/mods-enables/eapファイルの中のtls-configにあり、証明書は/etc/raddb/certs/以下に置く作法。
 今回はHTTPSで使っている既存のRapidSSL証明書を流用する。
 材料:hinagiku.crt = SSL証明書、hinagiku.key = 秘密鍵、rapidssl.crt = 証明書発行機関の証明書、以上3ファイルは/etc/raddb/certs/以下に配置

 この状態でradiusdをrestartする。 /var/log/radiusd/radiusd.log を tail -f しながら作業するのがオススメ。
 高級な証明書を使っていてWindowsの標準証明書ストアに信頼されたルート証明機関発行の証明書であれば特に設定はいらないけど、今回は安いRapidSSLなので手動でWindowsに登録する。
 Windowsでcertmgr.mscを実行、信頼されたルート証明機関にrapidssl.crtをインポートし、PEAPの設定画面でGeoTrust Global CAのチェックを入れれば認証できる。 更に、次のサーバに接続するのチェックボックスをオンにして、証明書のCNを入れておけば、当該証明書の時には無言で接続し、CNが異なる証明書が出た場合にはサーバー検証の警告画面が出るため、意図しないネットワークへの接続を抑制することが出来る。

・ゲストVLANを有効にする場合・・・
 GS108TのPort Controlで、Guest VLANを許可するポートのGuest VLAN IDを設定すると、当該ポートが認証できた場合はデフォルト動作、認証できなかった場合はPVIDとしてGuest VLAN IDが設定される。
 従って、ゲスト用ゲートウェイをGuest VLAN IDのVLANで接続できるようにしておくと、ゲストアクセスと当該VLAN間のみ通信できるようになる。
NETGEAR GS108T-a
NETGEAR GS108T-b
 あとは、ゲスト用ゲートウェイで当該VLANの通信を定義してやる。
 ゲスト用VLAN ID=100で、ゲスト用ゲートウェイとしてIX2215でスイッチポート8に接続している場合なら

みたいな設定を行えば、ゲスト時には192.168.3.1のネットワークとしてルータに接続させられる。

あとは普通のネットワークアクセス用と同じようにinterface GigaEthernet2:1.1上に、フィルタとか諸々設定していける。

 これで、GS108Tの非Authorizedポートのケーブルを出しておけば、自分のPCを繋げば通常のLANにアクセスできるし、来客が繋げばインターネットだけ使える状態に出来る。

(3092)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

IX2215でIPv6インターネット接続設定をした

 Outlook 2016を入れていてどうも自動設定が転けまくるので調べていたらv6が有効なマシンでv6インターネットアクセスが出来ないとダメらしい事がわかった(AAAAフィルタが必要か?)
 ちょっと調べると、うちで使っているSo-netの接続サービスはトンネル方式IPv6(IPv6 over PPPoE)に対応していて追加費用がいらないと言うことだったので設定を入れることにした。
 ルータはIX2215の9.0.54を使用。

  v6ではIPアドレス数が豊富なのでローカルエリアにもグローバルIPが設定できるので、DHCPで受け取ったIPが内部の端末に設定される(フィルタを設定しないと丸見え)
 従来、一般的にNATを使っていたけど、v6だとそれが必要なくなる(当面IPが足りるから)けど、着信接続をフィルタするのが基本だから、内部端末への着信を許可する場合はNATポート開放の代わりにv6のフィルタ解放が必要になる。
利点としては、同じポートを使う複数のサービスを使いたいときにポートを変換したり変更したりして明示指定してずらしていたのが不要になることくらい。
ただ、v4アドレスは普通に暗記できるけどv6アドレスはコピペじゃ無いと厳しそうだから結局面倒くさい・・・

(721)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ