作成者別アーカイブ:

出先や移動中にsshで作業する場合にはscreenを使う

 お名前.com VPSとかのVPSを仕事やら個人やらで使っていると管理にssh使うよね。

 Windows化していればRDPでの管理とかになるけど、その場合途中切断してもセッションが生き残ってて、再接続するとコンティニューできるけど、ssh管理の場合に途中で通信が切れるとプロセスが止まっちゃって処理が中途半端になったり色々不便。

 例えば、出先でsshでコマンド実行したけどやたら時間かかっちゃってなかなか離れられないとか、スマホとかで移動中に作業していて通信が途切れちゃって作業が完了できないとかで困る。

 で、そんなときはscreenを使うと便利。

 RedHat系ならyum install screenで入れられる。

 こいつは、マルチスクリーンのサービスとでもいうか、まぁ、コマンドラインでscreenと実行すると、そのままシェルが沸いてくるんだけど、シェルの管理がターミナルじゃなくてサービス側にあるのでターミナルが終了してもスクリーンが生き続ける。
 screen上で実行しておけば、sshを切断しても処理継続したりスリープさせておいたり出来る。 なので、出先のsshで繋いだときに
screen
mysqldump …
C+a d
みたいな動きをしておくと、screenで新規スクリーンを立てて、そこで時間のかかる処理(この場合mysqldump)をして、C+a dのコードでスクリーンを動かしたまま離れられる。 手動でデタッチせずにsshが切れるとデタッチ扱いになる。

 再度ssh等で接続した時、
screen -ls
すると、生きているスクリーン一覧が見られるので、必要なスクリーン名に対して
screen -r 1234.my.server
みたいに実行すると、そのスクリーンに再接続できる。

 スクリーンを終了する場合は、C+dのコード送信かスクリーン上のシェルをexitすればOK。

 接続したら毎回screenを実行するようにしておけば、不意な切断などでも処理継続させられるので、是非活用したい。

(2577)


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

Linux上の特定ユーザで動いているプロセスを全て止める

 Linux環境上で特定のユーザで動いているプロセスが暴走したりしてLoadAverageが上がったりしたとき、まとめて殺す方法。

 sudo -u ユーザ名 kill -SIGKILL -1

 killコマンドの対象を-1にすると、実行ユーザの全てのプロセスになる。
 で、sudo -uで対象ユーザ権限で実行すれば、そのユーザの全てのプロセスに送れる。
 SIGHUPとかでも良いけど、やばいときはSIGKILLかな?

(2276)


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

VPSを活用してiPhoneやAndroidスマホでtorrentダウンロードする

 CentOSの1次配布サイトとか、だいぶ以前からネットワーク負荷低減としてtorrentを使って配布していますね。
 分散ダウンロードで配布する側も受け取る側も割と高速で便利なんですが、スマホ端末でダウンロードするにはちょいと不便、そこで私はVPSを活用してダウンロードしています。
 DropboxとuTorrentをWindowsサーバ化したお名前.com VPS上で動かすことで、スマホ上で簡単にtorrentダウンロード出来ます。

 まず、VPSをWindowsサーバ化します。 面倒なら、お名前.com デスクトップクラウド for Windowsアプリ
を利用すれば、簡単にホスティングされたWindowsデスクトップ環境が利用できます。

1,Dropboxを導入
 VPS上に、dropboxをインストールします。
 Dropboxはいわゆるクラウドストレージですが、複数のPCのフォルダをクラウド経由で同期してくれる優れもので、作業フォルダをDropboxで共有しておけば、自宅でも会社でも、スマホでも同じファイルが見られます。 基本の3GBは無料で、いくつかの簡単な操作で無料の追加容量がもらえて、月10ドルほどで100GBに拡張も出来ます。
 今回はDropboxアプリを全て基本設定のまま導入します。

2,uTorrentを導入
 torrentのクライアントのuTorrentをVPS上に導入します。
 基本設定で導入してuTorrentを立ち上げたら、メニューの設定を開いて、左のナビゲーションにあるディレクトリを選択して、↓みたいな感じの設定をします。
utorrent
※既定の保存先は適当に広いディスクにディレクトリ作成、それ以外はDropbox共有ディレクトリ以下にautoTorrentやfinishedTorrentディレクトリを作成して選択します。

3,スマホにdropboxクライアントを導入
iPhoneならAppStoreから導入、AndroidならGooglePlayから導入。
 1で取得したDropboxアカウントの設定を行います。
アプリへの直リンクを置いておきます

Android app on Google Play

 あとは、普通にスマホでSafariとかのブラウザでブラウジングして、torrentファイルをタップしたときに出るダウンロード方法の選択画面で、Dropboxを選んでautoTorrentディレクトリにダウンロードします。
 しばらく待っていると、finishedTorrentディレクトリの中に完了したファイルが出来上がります。

 uTorrentはtorrentファイル自動ロード元に指定したディレクトリを監視して、新しいtorrentファイルが保存されると自動でダウンロードしてくれるため、スマホでtorerntファイルをdropboxの監視ディレクトリにダウンロード指定すると、勝手にダウンロード処理を行ってくれます。
 そして、ダウンロードが完了すると、ダウンロード完了後の移動先に指定した場所に移動されるため、ダウンロードがすんだ物がdropboxアプリで開けるようになります。
 スマホのDropboxアプリ以外に、自宅や職場のPCにもDropboxクライアントを入れておけば、出先でダウンロード処理すると、PCにもダウンロード完了した物が勝手に保存されるので、とても便利です。

 torrentは接続処理などで単純なデータ転送以外の通信も発生するため、この辺を外部ホスト(VPS)に任せてしまえば、最終的なファイルだけDropboxから落ちてくるのでローカルの通信帯域も節約できます。
 この特徴は、単純にスマホからダウンロードする場合だけでなく、通信量制限のあるモバイル回線をPCで利用している場合にも、VPS経由でダウンロードすることでtorrentのオーバーヘッドを減らしてくれる効果もあります。

 VPSを新規に契約すると月額1000円ほどかかりますが、NASのバックアップやミュージックサービス等、色々な機能を詰め込んでしまえば、最終的には1サービス単価は安く収まってお得になります。
 この辺は、VPSの自由度の高さ故の利点ですね。 サービスを上手く使い倒して、お得で快適な環境を手に入れたいですね。

(1603)


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

UnixBench参考値 – ProliantDL320eG8 E3-1290v2

 各VPSのレビュー時にUnixBenchを利用しているので、比較用に物理サーバのベンチ値を乗せておく。

Proliant DL320e G8
Intel Xeon E3-1290v2 / DDR3 8GBx2 / 300GB 2.5″ SAS 15krpm x 2 mirror @ SmartArray P420i

 先月契約したお名前.com VPSの4GBプランの結果は

 CPU周りについては1/2~1/3は出ている感じで、相変わらずコストパフォーマンスが高い印象。 ディスク周りも参考値のサーバの高性能ディスク比でこれだけ出れば健闘している。
 絶対性能ではやはり敵わないが、コストパフォーマンスは相変わらず非常に高い(Proliantを購入する価格は、VPSの60ヶ月分位なので、それだけでVPS2台を2年半契約できる。 運用費用も考えると、VPSよりも物理サーバが安くなることはほぼあり得ない感じだ)

(461)


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

muninプロトコルとプラグイン作成 – 組み込みLinuxとArduinoと・・・

 先日の記事でBeagleBone Black(BBB)を自宅の制御サーバにする件、徐々に環境移行をしていて、今回はそれ関係でmuninのプラグインを開発してみた。
 従来は制御ボードのAPIを叩くCで組んだWindowsプログラムだったのだけど、サーバを組み込みLinux(Ubuntu on BBB)に移した関係で諸々の書き換え・作り替えを実施している。
 特に大きいのがセンサーを長々と配線して直接繋ぐ形から、センサーの側にマイコンを置いてデータ化して中央のBBBに集約する形にしている。

 昨今は、ワンチップマイコン(それも8ビット機)を割と簡単にネットワーク接続することが出来る(ネットワークコントローラにTCP/IPまで組み込まれている)ので、大きめのUSBメモリ位のサイズのユニットが普通にイーサネットに繋がって、HTTP等でデータ交換出来てしまうのだ。

 今回は試作として、Arduino大気圧センサーモジュールイーサネットシールドを組み合わせた簡易HTTPサーバとそのmuninプラグインを制作した(温度センサーだけでかまわなかったのだが、単機能センサーよりもBMP085気圧センサーの方が安かった・・・)
 HTTPについては、このブログを見ている人なら基本部分はおわかりかと思う。
GET /sensor.dat HTTP/1.1 とか送って、200 OKとか返すわけだけど、muninは結構利用していてもプロトコル自体はあまり知らないと思う。
私も知らなかったので、軽く調査してみたところ、簡単な仕組みだったのでプラグインを作ってみた。

muninプラグインを作る場合のポイント
・muninプラグインはmuninサーバ側(munin-cron)は基本的に何も作る必要なく、munin-node側さえ書けば動く
・muninプラグインはどんな言語でも作ることが出来る(特別なライブラリを必要としない)
・munin-nodeはポート4949で普通に平文テキスト形式で通信するので、munin-nodeプログラムを使わず直接ノードを構築することも簡単(Arduino上にも簡単に実装出来る)

 munin-nodeを叩くとある程度対話的に操作可能なインタフェイスがある。
ローカルホストのデフォルト設定のmunin-nodeに接続するなら、

でOK。

繋ぐと・・・

とか、帰ってくる。

とりあえず、Enterキーとか押してみると・・・

とか、普通にコマンドリストが帰ってきた。

それぞれ実行してみた。

capはmunin-nodeの機能の話?
versionとquitはそのまんまだね。
listは動作しているプラグインのリスト表示。
nodesは取得出来るノード名のリスト表示。
configはプラグインの設定を得られる(config プラグイン名)
fetchはプラグインの値を得られる(fetch プラグイン名)

 最低限の動作は、listにプラグイン名が出て、configでプラグインの情報を得て、fetchでプラグインの値を取得する。
1,プラグイン名は、/etc/munin/plugins/以下のファイル名で自明。
 今回試作するプラグインは、気圧センサーの値を取得するので
/etc/munin/plugins/env.barometic
と言うプラグインファイルを作成した。 このファイルは、実行可能である必要がある(chmod +x env.barometic)
 munin的にはperlが基本だろうけど、今回は簡単にshellで作成、と言うことで

で書き始め。

でPHPプログラムでもOKだね。

2,config情報はプラグインの第1引数にconfigと与えた場合の戻り値そのまま
なので、第1引数をifして、先のconfigの戻り値みたいなテキストを戻す。

 これで、実行権限を付けてmunin-nodeを再起動すれば、次回のmunin-cronが回ってきたときにはグラフ一覧ページに追加される。
 データ系列を追加するなら、

みたいに、.前の名前を変えて列挙していく。

3,fetchの戻り値は引数無しで実行した場合の戻り値
なので、引数チェックが引っかからなかった場合に

 今回はネットワーク上の192.168.0.123にArduinoで作ったセンサーユニットがあって、/getPをHTTPで取得するとパスカル単位の気圧がただ出力されるようにしてあるので、それをhPaに変換(100で割るだけ)して出力している。

 センサーユニットが192.168.0.124, 192.168.0.125にもある場合、

これで、123~125の3個のセンサーを読んできて1枚のグラフにまとめてプロットするプラグインが完成。

BBBのADCを利用する場合・・・

 これで、BBBのADCの0~7の生電圧を記録してグラフ化出来る。
 組み込みマイコンで1からグラフ描画とかを作るのは非常に面倒だが、Linuxの利点である既存のOSS(今回はmunin)利用によって、簡単にグラフ化してWebインタフェイスで見られる訳だ。
 ADCにLM35温度センサーをぶら下げているならば、LM35の特性は10mV/degCなので、そのままでも気温の10倍の値が表示されるし、value=expr $value / 10を挟めばぴったりセ氏温度になる。
 AC712電流センサーをつければ、殆どプログラムらしいプログラムを書くこと無くWebインタフェイスでグラフ表示可能な電力計ができあがってしまう。

↓PC置き場に設置したArduinoセンサーノードをBBB上のmuninで監視してみる。
温度

気圧計

 ネットワーク接続センサー・ロガー等の設計・試作、量産対応可能です(デバイスからインターネット連動システムまで全般対応可能)
 お問い合わせください。 > inquiry at studioes.net

(808)


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

BBBにWordPressを導入してみた – BeagleBone BlackでUbuntuServerテスト編

 昨日書いたとおり、自宅の制御系マスターとしてBeagleBone Blackを購入したわけだけど、どのくらいの能力があるのか試したくて1台のBBBにWordpressを導入してみた。

 環境セットアップの手順をメモっておく。
1,Ubuntu導入
 BBBのデフォルトOSはAngstromLinuxだけど、マイコン最適化で色々削られているし、ユーザ情報が少ないので、最近いじり始めたUbuntuを導入してみることに。
 組み込み系の物でOSを入れると言えば、ソースコードかき集めてきてビルドしてライターで焼いてとなるわけだけど、BBBについては、事前にパッケージングされたイメージが結構出回っていて、これをSDカードに書き込んでやるだけでいい。

 今回は、こちらから、Ubuntu12.04LTSのイメージを取得してきた。
 xz形式なので、いったんVPS上にダウンロードして展開して(新しい圧縮形式で、xzプログラムが必要なので。 apt-get install xz とか、 yum install xz とかする)、gz圧縮し直してPCにダウンロードした。

 展開したファイルは約2GBで、ディスクのローイメージ(パーティション情報なんかも含むイメージ)なので、Win32DiskImagerでmicroSDHCカードに書き込む。

2,Ubuntu起動
 BBBの基板上にあるmicroSDHCカードを挿入して電源を投入すると、BBBのローダーがmicroSDHCにブート処理を回して起動してくれる。

 EoUは動作しないので、HDMI(uHDMI)にディスプレイ、USBにキーボードを接続しておいた方が便利だが、とりあえずなら、DHCPサービスが動いているネットワークにLAN接続しておけばDHCPクライアントが動作してsshがデフォルトで使える。 Angstromほど起動は速くないから、コンソールを繋いでいない場合は2分くらい?待つ。

 起動が完了したら、sshで接続する。 ポートは通常の22で、ユーザとパスワードはubuntu/ubuntuがデフォルトである。 ubuntuユーザはsudo出来る。

3,普通にUbuntuとして使う
 まぁ、ここまで来れば、殆ど普通のUbuntuが入ったサーバと変わらない。 KDEとか設定すればHDMIでXも出来るけどもっさりだし、おとなしくルータの横に並べて設置(ルータのUSBポートから電源取れるし)して、リモート操作だ。

 まずは、パスワード設定
#passwd
 ネットワークのアドレスを固定する場合は
#vi /etc/network/interfaces
で設定を書く。
我が家ではDHCPサーバの方にこちらのMACアドレスを書いて固定払い出しにした(別のネットワークに繋ぐのにDHCPのが楽だから)

 SDカードの空き領域を何とかする(パーティションを切っているから、2GBより大きいSDカードに入れている場合、空き領域がもったいない) rootファイルシステムを拡張しちゃうのもありだけど、今回は、新しいパーティションを切って/varにポイントした。
#fdisk /dev/mmcblk0
#mkfs.ext3 /dev/mmcblk0p3
※通常の/dev/sdとかじゃなく、/dev/mmcblkになる。 ここにはmicroSDスロットとeMMCがぶら下がっていて、起動に使ったデバイスがmmcblk0で使わなかった方が1になる。 この状態でmmcblk1に下手に手を出すとROM焼きしないといけなくなる可能性もアルので注意。
今回はプライマリの3番パーティションにすべての残り領域を設定した。

#mv /var /var.tmp
#mkdir /var
#mount /dev/mmcblk0p3 /var
#mv /var.tmp/* /var/
#vi /etc/fstab
/dev/mmcblk0p3 /var auto defaults 0 1

 色々導入する。
 普通にaptでパッケージ管理出来るので、とりあえずリストを更新。
#apt-get update

aptで普通に入れたい物を入れていく。
今回入れた物
vim 定番エディタ
libtime-format-perl, make, gcc UnixBenchに必要
telnet, inetutils-tools, inetutils-traceroute, dnsutils, dstat, sysv-rc-conf 管理系のコマンド類
php5, php-apc, php5-mysql, mysql, nginx WordPressに必要(Apache2でも一応動くけどそれなりに重い。 lightを使うほどひどくも無いのでnginxを入れた)
postfix, munin 何となく入れてみた

 SDカードのフラッシュの耐久性でsqlとかおそらく即死するとは思うんだけど、更新とかtmp_to_diskを押さえれば大丈夫かな・・・ 本格的にやるなら、高耐久性のデバイスをUSBにぶら下げる(SLCのSSDとか)か、データファイルを一定期間ごとに移して、アドレスをずらしていくとかしないと厳しいとは思う。

 後は普通にWordpress導入手順
#mysql -p
で、wordpressユーザとDBを作成。

#cd /usr/share/nginx/www
#wget http://ja.wordpress.org/wordpress-3.6.1-ja.tar.gz
#tar xzf wordpress-3.6.1-ja.tar.gz

 nginxの設定は、/etc/nginx/sites-available/defaultsとかを修正。
 自動起動設定とかは、sysv-rc-configで設定。 今回は、mysql, nginx, postfix, munin-nodeを自動起動化。
 後は、普通にブラウザで繋いでセットアップ完了。
 iptablesのルールも無いから、ちゃんと使うなら入れた方が良いかもしれない? まぁ、うちはNetscreen管理のDMZ配置でポリシー管理されているから、こっちに入れる必要も無いだろうな。

 そんなわけで、こちらで公開してみます。
 案外、いけるでしょ?

(525)


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

マイクロLinuxマシン BeagleBone Blackを買った

 ハイパフォーマンス・常時稼働を要求する処理は基本的にGMOクラウドVPS等のVPSで行っているわけだけど、どうしても家に装置が無いと困る事もある。
 テレビレコーダ等の専用ハードウェアが必要なもの、高速・大容量性が必要なファイルサーバ等が代表であるけど、我が家では制御系の物も必要である(環境モニタ、扉開閉確認、電源操作等)

 基本的に、末端の装置はAVRとかの8ビットマイコンで開発・構築して、親機はPCIバス接続のロジックインタフェイスカードを入れたマシンだったのだけど、インタフェイスカードが不調になってきた。
インタフェイスカード買い換えかなと思うものの、PCIのインタフェイスは将来性が微妙、ならば親機ごとPCIeかなとも思うのだけど、一式で50万くらいでちょっとためらい。
 よくよく考えると、必要な機能・性能を考えると、最近の組み込み用のハードならいける感じがする。

 パワフルなマイコンと言えばRaspberryPi(パワーレスなPCとも)が手元に何台か有るんだけど、入出力ポート数が足りない。
何か無いかなと検索してみると、最近はPi的なボードが色々あるらしい。
 その中で目を付けたのはBeagleBoard系のボードであるBeagleBone Black(BBB)

 入出力が大量に引き出されているから、ピンヘッダでPIOもI2CもSPIもいけるけど49ドルとお安い。

 BBBは、A8アーキテクチャの1GHzプロセッサを中心に、512MBの主記憶(DDR3L)と2GB不揮発(eMMC)がオンボード搭載、microSDスロット、USBのホスト・デバイス、FE、HDMI等揃っている。
 パッケージを開けると、ボードとUSBケーブルとCD-ROMだけの超シンプルさ。
 USBケーブルをPCに入れて電源投入すると複合デバイスが検出されて、ストレージデバイスの中にはドキュメント等が収まっている。 EoU(Ethernet over USB)のネットワークも出てきて、192.168.7.1がPCに割り振られて、192.168.7.2にBBBが稼働していて、HTTPやSSHで覗くことが出来る。
 とりあえず、デフォルトのOSはAngstromLinuxなんだけど、扱い慣れていないのでUbuntu12.04をインストールした。

 まぁ、細かい話は別にするとして、とりあえず、このブログ的にはサーバ能力はどうなのよ?ってところで、UnixBenchを実行してみた。

 システム140位というわけで、マイクロプランのVPSの1/10にも満たない。
 まぁ、高度な分析処理はVPSまかせにするので、センサーノードの情報を集めてVPSに定期送信できれば問題ないので、必要十分な性能ではある。

(561)


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