趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • Dockerを味見してみた(追伸)の追伸

    投稿日 2015年 1月 30日 コメントはありません

    Dockerを非rootで操作するには/etc/default/docker.io の DOCKER_OPTS の設定を・・・なんて昨日の記事では書いてしまったが、そんな面倒なことをしなくてもできるらしい。

    単純にユーザーが docker グループの権限を持っていればいいだけなのだそうだ。

    つまり、

    $ sudo addgroup ユーザー名 docker

    とした後、ログインしなおせばよい。


  • Dockerを味見してみた(追伸)

    投稿日 2015年 1月 29日 コメントはありません

    Dockerの味見の際に「rootで操作するもののようだ」と記載しましたが、一般ユーザーで触る方法がわかりました。

    ホストがUbuntuの場合には、/etc/default/docker.io の DOCKER_OPTS の設定を

    DOCKER_OPTS="-H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock --dns 8.8.8.8 --dns 8.8.4.4"

    となるように修正し、

    $ sudo service docker.io restart
    docker.io stop/waiting
    docker.io start/running, process 13197
    $

    として Docker を再起動、

    $ export DOCKER_HOST=tcp://127.0.0.1:4243

    として環境変数を設定、

    $ docker info
    Containers: 0
    Images: 0
    Storage Driver: aufs
     Root Dir: /var/lib/docker/aufs
     Dirs: 0
    Execution Driver: native-0.2
    Kernel Version: 3.13.0-44-generic
    WARNING: No swap limit support
    $

    で一般ユーザーでもアクセスできるようになりました。


  • Dockerを味見してみた

    投稿日 2015年 1月 28日 コメントはありません

    ネット散策していたら最近の仮想化技術(コンテナ技術?)で Docker というのが流行っているらしいことがわかりました。比較的簡単に試せるみたいなので、さくらのナリッジのこちらの記事を参考にちょっと試してみます。

    1.環境構築

    母艦環境は普段使っている Ubuntu14.04 LTS 64bit です。
    (Dockerは64bit環境のみサポートのようです)

    Synapticで「docker」で検索すると「docker.io」というのがでてきます。説明を見ると「Linux container runtime」ということなので、これがDocker環境のようです。
    こいつにチェックマークをつけてインストールします。

    インストールが終わったら、コンソールで

    $ docker

    とすると、説明が出てきました。

    2.Hello Worldを試してみる

    まず、ちょっと試してみます。

    $ docker run ubuntu /bin/echo hello world
    2015/01/28 00:49:03 Post http:///var/run/docker.sock/v1.12/containers/create: dial unix /var/run/docker.sock: permission denied

    となってエラーになってしまいました。

    こちらをみるとどうやら基本は root で弄るもののようです。でも、一般ユーザーでも触る方法があるようなのですが、今回はrootで動かしてみます。

    $ sudo docker run ubuntu /bin/echo hello world
    Unable to find image 'ubuntu' locally
    Pulling repository ubuntu
    b39b81afc8ca: Pulling image (latest) from ubuntu, endpoint: https://registry-1.db39b81afc8ca: Download complete 
    511136ea3c5a: Download complete 
    53f858aaaf03: Download complete 
    837339b91538: Download complete 
    615c102e2290: Download complete 
    hello world
    $

    待つこと30秒位でしょうか。イメージをダウンロードした後、表示されました。
    2回目はすでにイメージがローカルにあるので、一瞬で表示されました。

    3.WordPressを動かしてみる

    追っかけるだけになってますが、同様にWordPressを動かしてみます。

    $ sudo docker build -rm -t tomono/wordpress git://github.com/jbfink/docker-wordpress.git
    Warning: '-rm' is deprecated, it will be replaced by '--rm' soon. See usage.
    Sending build context to Docker daemon 112.1 kB
    Sending build context to Docker daemon 
    Step 0 : FROM ubuntu:latest
     ---> b39b81afc8ca
    (途中省略)
    Step 19 : CMD ["/bin/bash", "/start.sh"]
     ---> Running in 9ed82742d36f
     ---> 0dfcba1fda89
    Removing intermediate container 9ed82742d36f
    Successfully built 0dfcba1fda89
    $

    ・・・として、イメージが生成されるようです。

    で、実行。

    $ sudo docker run --name wordpress -d -p 8080:80 -p 2022:22 tomono/wordpress
    4d13e5e74ddb45787f9c0e11120d6e88ad9844895a1779a9fe33c8c191104dca
    $

    ブラウザで 127.0.0.1:8080 にアクセスするとWordPressが動いているのが確認できました。

    $ sudo docker stop wordpress
    wordpress
    $ sudo docker start wordpress
    wordpress
    $

    で停止、スタートも確認できました。

    4.不要になったコンテナの削除

    最後に不要になったコンテナを

    $ sudo docker rm `sudo docker ps -a -q`
    4d13e5e74ddb
    8e8f4a436e47
    29378160a9e8
    $

    として削除しました。イメージの方は、

    $ sudo docker images 
    REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
    <none> <none> eba3c3f6eca6 About an hour ago 458.2 MB
    ubuntu latest b39b81afc8ca 10 days ago 188.3 MB
    $ sudo docker rmi eba3
    Deleted: eba3c3f6eca6595bcb2822b4c532ce47fb99d2ecd6db169c9dffe4beebca644e
    (途中略)
    Deleted: caa76d7258ec6b0f5d1f1c0e6a7827612fcb0c995cd8654d60d90dd8ff606562
    $ sudo docker images 
    REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
    ubuntu latest b39b81afc8ca 10 days ago 188.3 MB
    $ sudo docker rmi b39b
    Untagged: ubuntu:latest
    Deleted: b39b81afc8cae27d6fc7ea89584bad5e0ba792127597d02425eaee9f3aaaa462
    (途中略)
    Deleted: 511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158
    $ sudo docker images 
    REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

    として削除しました。

    まだまださくらのナリッジのこちらの記事にはたくさん説明があります。どんなことができるのか解りやすくて助かります。


  • フレッツ光だけど上流は100Mbps?

    投稿日 2015年 1月 27日 コメントはありません

    いま、単身赴任で静岡県に住んでいます。単身赴任先にはフレッツ光を引いているのですが、はっきりいって本来の自宅の方が速いです。自宅はマンション共用で各戸には100MbpsのEthernetが引かれているのですが、CDN(Contents Delivery Network)経由でダウンロードするものでメジャーなものは大抵の場合には上限の11か12MiB/秒くらいに張り付きます。

    しかし、フレッツ光ではもちろん上流の影響なのでしょうが、なかなか10MiB/秒を超えません。それどころか数MiB/秒を超えることもなかなかありません。
    今回、Windows10 Technical Previewをダウンロードしていたら、めずらしく速度が出ていたのですが・・・

    Screenshot from 2015-01-27 22:31:50

    結局12MiB/秒に壁があります。12MiB/秒☓8bit=96Mbit/sで、見事に100Mbpsに壁が見えてます・・・・。まあ、ルーターのせいかもしれないですが。

    ぜんぜん1Gbit/sに行きそうにない光回線の話でした・・・。


  • ちょっと気になるかなぁ・・・

    投稿日 2015年 1月 13日 コメントはありません

    時々、Hi-netの自動処理震源マップとかを見てたりするのですが、ちょっと気になったので記事にしておきます。

    下の画像は、2015年1月13日午前2時くらいに見た本州中部の過去30日の震源マップです。

    TONANKAI_MAP

    一方、下記の画像は気象庁のWebサイトから持ってきた東海地震の想定震源域の図です。

    shindo_s

    これらを重ねあわせてみました。

    OVERLAY

    想定震源域の赤い線の北半分の部分の少し内側に沿って地震が発生していることがわかりますか?

    過去7日の震源マップも持ってきてみました。

    TONANKAI_MAP7

    これに想定震源域を重ねあわせると、

    OVERLAY7

    となります。やっぱり想定震源域の赤線の少し内側に沿って起きているように見えますよね・・・。

    大きな地震の前にはその周辺域で小さな地震が増えるという話も読んだことがあるので、ちょっと心配です。

     


  • Ubuntu MATE 32bitをUSBメモリにインストール

    投稿日 2015年 1月 11日 コメントはありません

    Ubuntu MATE 32bitをUSBメモリにインストールしてみました。

    なぜMATEかというと、通常のデスクトップ環境ではやはり重いので、なるべく軽いものにしたかったためです。

    今回も32bit版をインストールしました。ダウンロードはこちらから。

    いつものように、まずVMware上で一度インストーラISOイメージで仮想マシンを作って起動します。その後、一旦シャットダウンして、仮想マシンからHDDを取り除きます。一度起動するのは、仮想マシン作成直後はHDDを取り除けないからです。

    次に、再度、インストーラISOイメージで仮想マシンを起動します。
    起動して試すだけかインストールするかの選択画面がでたところでUSBメモリを取り付けます。今回は、新たにSanDiskのExtreme USB3.0 64GBを使ってみました。USBメモリを取り付けたら仮想マシン側に認識させ、その後でインストーラで「Ubuntuをインストール」をクリックします。

    あとは普通にHDDにインストールするのと変わりませんが、データ領域を多めに取りたかったのでパーティションは手動で分けました。

    インストールが終わったら、仮想マシンを終了し、PCを再起動します。この時にBIOSで内蔵SATAを禁止します。

    再起動したら、過去の記事同様にいろいろ設定します。

    • SATAの禁止(内蔵HDDへのアクセス禁止)
    • /etc/fstabの設定(tmpfsの設定、マウントオプションにnoatimeを追加など)
    • 内蔵時計のUTC設定をローカルタイム設定に変更

    など。

    SATAを禁止したら、再起動後に内蔵HDDが見えない状態になっているのを確認します。あとは内蔵HDDのつもりで作業すれば大丈夫。

    引き続き、いろいろやりますが、こちらが参考になります。

    それにしてもSanDisk Extreme USB3.0 64GBは速いです。

     


  • Linux上でCUPSプリンタを共有する

    投稿日 2015年 1月 8日 コメントはありません

    先日購入したBrother HL-2240Dですが、Windowsから使ったりLinuxから使ったりで結構面倒なことになっています。こんなことなら、LAN内蔵モデルにしておけばよかったと後悔しています。

    といっても買い換えるわけにもいかない(最悪、それもないではないですが・・・)ので、何とかしていきたいと思います。

    まずは、どれかマシンを決めてUSBで接続しておくことにします。ここでは、LinuxMint17 32bitを実行しているAthlon5350マシン(ブログ記事にはしていないのですが、結局BIOSTARのCeleron847マザーは突然再起動病が収拾せず、引退させました。代わりにAthlon5350を導入しました)に接続することにします。

    ドライバのインストールに先立って、IPアドレスを固定します。今回はルータでDHCPの固定割り当てをすることでIPアドレスを固定しました。

    次にプリンタドライバをインストールしますが、プリンタドライバのインストールは以前の記事とまったく同じ方法でテスト印刷まで行きました。

    で、共有をかけてみます。
    「システム管理」→「プリンタ」でプリンタの管理ウインドウが開きます。

    Screenshot-プリンター1

    サーバーメニューで「設定」を開きます。

    デフォルトではすべてチェックが外れていますが、

    • 共有するので「このシステムに接続されている共有プリンタを公開する」にチェック
    • IPPプロトコルを使うので「インターネットからの印刷を許可する」もチェック
    • どうせ家庭内ネットワークであり、グローバルアドレスは持ってないので「リモート管理を許可する」もチェック
    • 「ユーザーにジョブのキャンセルを許可する」もチェック

    します。

    Screenshot-2

    プライベートアドレスを割り振った家庭内ネットワークであり、外部から直接接続される可能性のあるIPv6もルータで殺してある(IPv6ブリッジ、IPv6パススルーを禁止してある)ので、割り切った設定です。自宅内専用なのでファイアウォールも入っていません。

    この状態でhttp://127.0.0.1:631/をブラウザで開くと以下のようになりました。

    Screenshot-3

    この状態から他のPCからは見えるのに印刷できない状態でだいぶ悩みました。サーバの設定も「リモート管理を許可する」をチェックしても反映されません。また、上記画面で「管理」を押すと設定画面になるのですが、やはりリモート管理が許可できません。(ユーザーがlpadminグループに所属していないといけないようなのですが、少なくとも見掛け上はそう見えています)

    この手のパターンは、何かの設定ファイルが読み込まれていない、とかそんな感じです。そこで、一旦PCを再起動したところ・・・・「リモート管理を許可する」ができるようになりました。
    この状態でネットワークでつながった別のUbuntuマシン上で「プリンター」を開いて「追加」を押すと、ネットワークプリンタの中にAthlon5350が出てきます。そして、これを選択するとネットワークプリントができるようになりました。(ただ、このPCは別途ドライバをインストールしたことがあるので、ドライバのインストール要否はわかりません)

    とりあえずLinuxからはそれなりに共有できるようになったようです。


  • MediaTekのスマートウォッチ用SoC

    投稿日 2015年 1月 7日 コメントはありません

    これまたネットを彷徨っている際に見つけたものです。

    きっかけはいつものHackaDayの記事です。

    「まるでArduinoが555のようにみえる」という書き出しで始まる記事ですが、「364MHzの32bitプロセッサ、8MBのRAM、GSM、Bluetooth、LCDコントローラ、PWM、USB、その他たくさんのものが入ってZippoよりも小さくてダンボールよりも薄い。これがわずか3ドル。使わない理由がない」という記事です。

    このチップ、$12で売られている”Gongkai Phone”という携帯電話・・・”Gongkai”は中国語では「公开」と書くようで、日本の漢字を当てると「公開」となります・・・のSoCとして使われているもののようです。Gongkai Phoneがどんな携帯電話かというと、こちら(GIGAZINE)に日本語の記事がありました。

    調べていくと、MediaTekのMTK6260というチップが引っかかってきて、スマートウォッチなどにも使われているようです。(後の紹介ビデオの説明ではMT6260はすでに市場で$30を下回って販売されているスマートウォッチに使われているとか・・・)
    あと、単体のGPSトラッカーなどにも使われているようです。

    MediaTekは最新のエントリークラススマートウォッチ用のチップセットとしてMT2502というのをリリースしているようです。(Youtubeでの紹介ビデオ
    このチップのTechnical Briefを見ると、

    • ARM7EJ-S(最小26MHz、最大260MHz?)
    • Bluetooth4.0
    • FMラジオ受信(データ放送も受信できるみたいです)
    • シリアルFlash I/F
    • VGAまでのCMOSカメラI/F
    • UART、USB1.1、SDIO、SDストレージなどのI/F
    • キーパッドI/F、SIMコントローラ、RTC、PWM、LCDコントローラ
    • AD/DAコンバータ
    • GSM/GPRS無線フロントエンド
    • リチウムイオン電池制御

    などを含んでいるようです。(ちょっとちゃんと読まないと怪しいかも)
    MCMとしてDRAM256MBを含んでいそうな感じの記事もあります。(ビデオでもメモリを統合している、という説明があります)

    残念ながら日本ではGSM/GPRSは使えないので萱の外という感じもしますが、海外では旧世代のGSM/GPRSは回路コストも消費電力も抑えられるようになってきたので、IoTの接続手段としてしぶとく生き残っていくのかもしれません。


  • STM32F401で遊んでみる(5)

    投稿日 2015年 1月 6日 コメントはありません

    9.printf()やgetc()を使ってみる

    mbedを挿入した際のログをdmesgコマンドでみてみました。

    [15886.601036] usb 2-1.4.3: USB disconnect, device number 9
    [15888.075962] usb 2-1.4.3: new full-speed USB device number 10 using ehci_hcd
    [15888.225240] scsi7 : usb-storage 2-1.4.3:1.1
    [15888.225648] cdc_acm 2-1.4.3:1.2: This device cannot do calls on its own. It is not a modem.
    [15888.225670] cdc_acm 2-1.4.3:1.2: ttyACM0: USB ACM device
    [15889.223047] scsi 7:0:0:0: Direct-Access     MBED     microcontroller  1.0  PQ: 0 ANSI: 2
    [15889.224257] sd 7:0:0:0: Attached scsi generic sg2 type 0
    [15889.226709] sd 7:0:0:0: [sdb] 1072 512-byte logical blocks: (548 kB/536 KiB)
    [15889.227459] sd 7:0:0:0: [sdb] Write Protect is off
    [15889.227464] sd 7:0:0:0: [sdb] Mode Sense: 03 00 00 00
    [15889.227958] sd 7:0:0:0: [sdb] No Caching mode page found
    [15889.227963] sd 7:0:0:0: [sdb] Assuming drive cache: write through
    [15889.230723] sd 7:0:0:0: [sdb] No Caching mode page found
    [15889.230728] sd 7:0:0:0: [sdb] Assuming drive cache: write through
    [15889.235618]  sdb:
    [15889.237988] sd 7:0:0:0: [sdb] No Caching mode page found
    [15889.237993] sd 7:0:0:0: [sdb] Assuming drive cache: write through
    [15889.237996] sd 7:0:0:0: [sdb] Attached SCSI removable disk
    
    

    よくみると、USBストレージだけではなく、ttyACM0というデバイスが追加されていることがわかります。

    調べてみると、Serialクラスでprintf()やgetc()などが使えそうです。プログラムの方は、

    #include "mbed.h"
    
    Serial pc(USBTX,USBRX);
    DigitalOut myled(PA_5);
    DigitalIn button(USER_BUTTON);
    
    int main() {
        int c=200;
        char k;
        pc.baud(115200);
        pc.printf("This is TEST!!\r\n");
        while(1) {
            if(pc.readable()){
                k = pc.getc();
                if((k=='a') && c<1000) c+=50;
                if((k=='z') && c>100) c-=50;
                pc.printf("Value of c: %d\r\n",c);
            }
            if(button){
                myled = 1; // LED is ON
                wait((double)c/2.0/1000);
                myled = 0; // LED is OFF
                wait((double)c/2.0/1000);
            } else {
                pc.printf("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\r\n");
            }
        }
    }
    
    

    としてみました。内容は、

    • シリアルコンソールを115.2kbpsで開いて、メッセージを出力します。
    • 読み出せるキャラクタがあるかreadable()で確認
      (これをやらないとgetc()はキーが押されるまで動作をブロックします)
    • 読み出せる場合にはgetc()で読み出し
    • 入力文字を判別してcの値を増減
      (キーの値が読めているか確認するため)
    • ボード上のUSERスイッチが押されていない場合はcの値に応じてLEDを点滅
    • ボード上のUSERスイッチが押されている場合には文字を多数出力
      (本当に115.2kbpsでているか確認したいため)

    としています。

    プログラムを作成したらコンソールを一つ開いて、

    $ screen /dev/ttyACM0 115200

    としてシリアルコンソールを115.2kbpsで開きます。

    その後、compile(と書き込み)を行って動作を確認しました。


  • STM32F401で遊んでみる(4)

    投稿日 2015年 1月 5日 コメントはありません

    7.ソースコードをさらに改変してみる

    そのままIDEのウインドウを閉じてしまっても、IDEの左側の「Programu Workspace」の中の「My Programs」の中にツリー状に残るようです。

    こんどは別のテストをしてみるため、importしなおしてみましたが、この時にプロジェクト名も変更してみました。そうすると、「My Programs」の中にもう1つツリーができました。

    次の変更はボード上のボタンを使ってみます。ポート割り当ては、「USER_BUTTON」と「PC_13」のようなので、まずは「USER_BUTTON」でやってみます。

    修正後のソースは

    #include "mbed.h"
    
    DigitalOut myled(PA_5);
    DigitalIn button(USER_BUTTON);
    
    int main() {
        while(1) {
            if(button){
                myled = 1; // LED is ON
                wait(0.2); // 200 ms
                myled = 0; // LED is OFF
                wait(0.2); // 200 ms
            } else {
                myled = 1; // LED is ON
                wait(0.05); // 50 ms
                myled = 0; // LED is OFF
                wait(0.05); // 50 ms
            }
        }
    }

    としてみました。

    これでコンパイルすると・・・ボタンを押すと点滅が高速になりました。

    8.ここまでのまとめ

    書くと長いですが、わかってしまえば実際の作業はあっという間です。
    特に何よりもありがたいのは開発環境のインストールが必要ないことです。これでどこでも開発ができてしまいます。

    一方で、実際に触ってみたmbed環境はIDEこそ本格的な開発環境の雰囲気ですがライブラリ等まで考えて見てみるとArduinoを強く意識しているように見えます。
    より本格的な開発環境もWeb上で完結してしまうと楽ちんでいいですね。