2015年10月26日月曜日

Dockerで複数のコマンドを引数で渡す

Dockerで複数のコマンドを引数で渡そうとして、たとえば、
docker run -it centos:6 ls -lah;pwd
としても、lsしか実行されません。pwdはDockerサーバ側で実行されます。&&にしても同じです。
まぁよく見ればわかるのですが、これは"docker run -it centos:6 ls -lah"と"pwd"を続けて実行しているだけですね(汗

かといって、
docker run -it centos:6 "/bin/ls -lah"
としてみても、exec: "/bin/ls -lah": stat /bin/ls -lah: no such file or directoryとなぞのエラーを返します。
これ、方法が分からなくて地味に悩んだのですが、さすがTwitter。即回答が帰ってきましたw
というわけで、
docker run -it centos:6 sh -c "cd ~/;ls -lah;cd /tmp;pwd;ls -lah"
のように、sh -c で渡すと実行できます。

gitbucketにPushするときにreturn code 22と出る

GitHubからクローンしたプロジェクトを自宅gitbucketに移したときにはまったのでメモ

まず、githubからクローンしてきます

git clone https://github.com/aipocom/aipo.git

自宅gitbucketに変更します

git rm origin
git remote add origin http://git.localdomain:8080/gitbucket/git/akira/aipo.git
としてpushすると、
error: Cannot access URL http://git.localdomain:8080/gitbucket/git/akira/aipo.git/, return code 22
fatal: git-http-push failed

と蹴られます。
このエラーはリモートオリジンの指定がおかしいときに出るようです。
git remote rm origin
で先ほど設定したリモートオリジンを削除し

git remote add origin http://akira@git.localdomain:8080/gitbucket/git/akira/aipo.git

とホスト名の前にユーザ名@を追加するとうまく動きます。

2015年10月18日日曜日

100均に売られている自称5V1Aなアダプタをバラしてみた。

100均に売られている、自称5V1Aなアダプタをばらしてみました。

お約束ですが、例によって分解などは自己責任でお願いします。書き起こした回路図ですが、合っている保証はありませんし、一部定数は記載していません。参考程度に留めてください。


以前某社製にそっくりなアダプタをバラしたのですが、最近は少し大きくなった新型が出たそうなので、入手してバラしてみました。


嘘か本当か、240V対応らしいです。


最初で最後の動作チェック(笑)
 
一応700mA程度は出るようです。

では早速分解します。

裏側。
今回は片面基板のようです。
前回はトランジスタ式でしたが、今回はIC化されています。しかし、2次側のフィードバックはなし。

では、回路をトレースしていきます。
2次側は単に半端整流しているだけなので省略。


ICの型番はググって見たもののヒットせず不明。


2015年10月17日土曜日

CorageのギガビットルータCG-BARGXを直してみる

PHPカンファレンス2015に行って来たついでに、秋葉のジャンク屋さんで購入したルータ、CG-BARGX、980円もしたのですが、実は有線ルータだったり地雷ルーターだったりで色々残念だったのですが、 なんとファームウエア不良っぽく、PCからは認識されないわ工場出荷時にリセットできないわで早速楽しめそうです(笑)

あ、毎度のお約束ですが、今回は無線LANじゃないので電波法云々はなさそうですが、分解修理は自己責任になります。内容の正確性も含め一切の保障はありません。


まずは分解。後ろにあるゴム足の中にネジ(T8かな?)があるので、それを外すと、特に爪もなくカパッと外れます。
このあたり親切。
カパッと外すとこんな感じ。




シリアルが出せそうな4ピンがあるので、そこにヘッダピンを着けます。
VCCは必要ないので、TX、RX、GND だけ着けました。


ここまで出来れば、あとは適当なRS232C-TTL変換(3V系対応のやつ)でつなぎ、57600bpsで接続して電源を入れると、UBootの画面が出てきます。
どうやら、ブートローダは生きているようです。

では、ファームを流していきます。
必要なものはTFTPサーバと、純正ファームウエアです。TFTPサーバはググれば色々出てきますので、適当なのをインストールしてください。ファームは解凍し、中のbargx_130.fimをTFTPサーバの転送用ディレクトリに配置します。
ルータのLANポートとPCをLANケーブルでつなぎ、PC側のIPを192.168.1.100にします。
また、PCに無線LANやBlueToohなどが有る場合は無効化し、Windowsファイヤーウォールやアンチウイルス系のファイヤーウォールは無効化します。
無効化しないと、TFTPでの転送が出来なかったり、コケたりします。また、Bluetoothや無線LANが生きているとうまく転送されなかったりしますので、ルータとPCを直結させることが重要です。
シリアルコンソールはつないだままです。こちらでモニターしつつ、LAN経由でファームを流していきます。
では、ファームを流していきます。TFTPサーバを起動し、LANケーブルの接続など準備できたら、
いったんルータの電源を切り、電源を入れたら、シリアルコンソール上ですばやく「2」を押します。
こんな画面になればOKです。

2: System Load Linux Kernel then write to Flash via TFTP.
 Warning!! Erase Linux in Flash then burn new one. Are you sure?(Y/N)
と聞かれるので、Yキーを押します。

 Please Input new ones /or Ctrl-C to discard
        Input device IP (192.168.1.1) ==:
ときかれるので、そのままEnterをおします。

        Input server IP (192.168.1.5) ==:
ここで、192.168.1.100と入力します。

        Input Linux Kernel filename (firmware.bin)==:

では、ファームウエアのファイル名bargx_130.fimを入力します。

ファームの転送が開始されます。


 ETH_STATE_ACTIVE!!
Start httpd!!!
In GemtekHttpdStart...
HTTPD from server 192.168.1.100; our IP address is 192.168.1.1

 HTTPD_TIMEOUT_COUNT=10,Load address: 0x80100000
Waiting: T T T T T

とでたら、ブラウザを開き、192.168.1.1にアクセスしますと、ファームをアップロードする画面が出ますので、再度ファームをアップロードします。

再度ファームが書き込まれます。

シリアルコンソール上に

 Copy 2871296 byte from 80100289 to Flash... bf060000 => OK!!!
done

At fw success!!!

とでたら、一旦ルータの電源を入り切りし、再起動させると、通常起動します。
ブラウザで192.168.1.1にアクセスすると、管理ページが開けます。

以上で修理完了です。

なお、この要領でDD-WRTなど純正以外のファームに書き換えることも技術的には可能です。
UBootさえ生きていれば、文鎮化しても純正ファームに戻すことが出来ます。

余談ですが、このルータ、シリアルコンソールで特にPWなしでいきなり中のLinuxにアクセスできます。
FWの構成自体はIPTablesのようですね。
FWのVer1.0のころはTopコマンド使えたのですが、最新の1.3 では削除されたようです。容量の問題かな?
/proc/status_led_ctrlにあるファイルをcatで開くと、Lチカしたりできます。









2015年10月14日水曜日

Jenkins+DockerでPHPUnitを動かすCIサーバを作ってみた。

PHPカンファレンス2015の書籍コーナーにて、「何か買ってけ。」と言われたものの、自分プログラマじゃないしなー
というわけで、以前から気になっていたDocker本を入手。

どうせDockerやるならTDDだよね。というわけで今風なCIサーバを作ってみました。
CircleCIみたいにプッシュしたら自動でテストが走って~なやつです。

当初Jenkinsサーバ内にDockerを入れていたのですが、テスト中は当然Dockerが動くのでメモリは食うわ重くなるわでこりゃ駄目だ。というのでJenkinsスレーブサーバに手を出す羽目に。

Jenkins+DockerなCIサーバはググれば構築事例は割りと有るので構築自体はそんなに悩まなかったのですが、プログラマじゃないのでPHPUnitの動かし方が分からない。という罠があるとは・・

というわけで、自宅検証サーバにて構築した内容は例によってWiKiにまとめています。
ついでにJenkinsのスレーブサーバ構築も。
Jenkinsスレーブサーバ、今まで環境依存なジョブを動かすために苦労していたのですが、環境ごとにスレーブに切り出す、さらにDockerに押し込めてしまえば随分と楽になりそうな予感がします。