Raspberry Pi向けNetBSDオープンソースカンファレンス2016東京春版イメージを動かす

ということで恒例のOSC合わせNetBSDイメージを試してみます.このページを読むより観光ガイドを読んだほうがいいかもしれません.

イメージとチェックサムファイルの入手と確認

$ wget ftp://ftp.netbsd.org/pub/NetBSD/misc/jun/raspberry-pi/2016-02-27-earmv6hf/2016-02-27-netbsd-raspi-earmv6hf.img.gz ftp://ftp.netbsd.org/pub/NetBSD/misc/jun/raspberry-pi/2016-02-27-earmv6hf/MD5

チェックサムの確認.
MD5の中のファイル名が間違ってるぽいです.

$ md5sum -c MD5
md5sum: 2016-02-24-netbsd-raspi-earmv6hf.img.gz: そのようなファイルやディレクトリはありません
2016-02-24-netbsd-raspi-earmv6hf.img.gz: オープンまたは読み込みに失敗しました
md5sum: libfreetype.so.17.4.11: そのようなファイルやディレクトリはありません
libfreetype.so.17.4.11: オープンまたは読み込みに失敗しました
md5sum: 警告: 一覧にある 2 個のファイルが読み込めませんでした
$ cat MD5
MD5 (2016-02-24-netbsd-raspi-earmv6hf.img.gz) = 1a669c2637a8861b7d383adba1de41ca
MD5 (libfreetype.so.17.4.11) = 936a15d6416c9b99176956151b4ef4df
$ md5sum 2016-02-27-netbsd-raspi-earmv6hf.img.gz
1a669c2637a8861b7d383adba1de41ca  2016-02-27-netbsd-raspi-earmv6hf.img.gz

Twitterで報告したのですぐ治ると思います.
直ってます :)

念のため直ったファイルで再確認

$ wget -O - ftp://ftp.netbsd.org/pub/NetBSD/misc/jun/raspberry-pi/2016-02-27-earmv6hf/MD5 | md5sum -c
2016-02-27-netbsd-raspi-earmv6hf.img.gz: 完了
md5sum: libfreetype.so.17.4.11: そのようなファイルやディレクトリはありません
libfreetype.so.17.4.11: オープンまたは読み込みに失敗しました
md5sum: 警告: 一覧にある 1 個のファイルが読み込めませんでした

イメージの書き込み

SD Cardのパーティション情報をwipefsで削除してイメージを書き込みます.2GB以上の容量が必要です.初回起動時にパーティションのリサイズが走るのですが,あまり大きな容量のCardだとこの処理にとても時間がかかるので程々の容量で.

$ sudo wipefs /dev/sdb -a
/dev/sdb: 2 bytes were erased at offset 0x000001fe (dos): 55 aa
/dev/sdb: calling ioctl to re-read partition table: 成功です
$ zcat 2016-02-27-netbsd-raspi-earmv6hf.img.gz | pv | sudo dd of=/dev/sdb bs=4096
1.82GiB 0:01:42 [18.2MiB/s] [     <=>                                                                                                                                  ]
476672+0 レコード入力
476672+0 レコード出力
1952448512 バイト (2.0 GB) コピーされました、 124.862 秒、 15.6 MB/秒

起動

起動してちょっと設定

英語キーボードを使っているので/etc/wscons.conf

encoding jp

を以下のように変更

encoding us

/.xinitrcの以下の行を削除

setxkbmap -model jp106 jp

再起動して設定反映.そしてstartx……画面が崩れます.

PIZEROで試した時と同じなのでもしかしてモニタが悪い?でもうちには1枚しかHDMIモニタが無いので確認できてません.
Ctrl+Alt+F1で端末に戻れます.そこでCtrl+CでXを終了させられます.

てことで幾つかモードを試してみましたがやはりダメそう.

<追記>
HDMI-VGAアダプタ経由で別のVGAモニタに繋いだら綺麗に表示されました.やっぱりなんかモニタがおかしいのかも.ちなみに問題のモニタはOn-Lap 2501MでRasbianやChromecast,PCで特に問題無さそうなもの.
</追記>

とりあえずX転送で試します.

適当にユーザを登録して,
/etc/ssh/sshd_configでX転送を有効に

X11Forwarding yes

sshdを再起動

# /etc/rc.d/sshd restart

PCからssh -Xで接続してmikutterを起動します.ちなみに-Cオプションも付けるとRaspberry PiのCPUを50~60%食うのでやめたほうが良さそう.(-C無いと5~15%前後)

fossilも試してみます.

$ fossil init sample-repo
$ fossil server sample-repo -P 12345 &

PC側のブラウザでアクセス

Unnamed Fossil Project
 
Home
Login
Home Timeline Files Branches Tags Tickets Wiki
 
This is a stub home-page for the project. To fill in this page, first go to setup
/config and establish a "Project Name". Then create a wiki page with that name.
The content of that wiki page will be displayed in place of this message.
 
This page was generated in about 0.067s by Fossil version [62dcb00e68] 2015-11-02
17:35:44

今度はパッケージの導入を試してみます.
今回はgawkを導入.

# /usr/sbin/pkg_add gawk
$ gawk -V|head -1
GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.3, GNU MP 6.1.0)

awkasterを動かしてみます.

$ wget https://raw.githubusercontent.com/TheMozg/awk-raycaster/master/awkaster.awk
$ gawk -f ./awkaster.awk

普通に遊べます :)

動画再生ソフトのomxplayerとlivestreamerも入れてみます.

# /usr/sbin/pkg_add omxplayer
# /usr/sbin/pkg_add py27-pip
# pip2.7 install livestreamer

これを使って国際宇宙ステーションからの地球を見てみます.(Ustream.tv)

# livestreamer --player omxplayer --fifo --yes-run-as-root http://www.ustream.tv/channel/17074538 --default-stream best

nicovideo-dlを利用してニコニコ動画を視聴することも出来ます.

# python2.7 nicovideo-dl-0.0.20120212/nicovideo-dl -u 'ユーザ名' -p 'パスワード' -q -o omxpipe http://www.nicovideo.jp/watch/1452050246 &
# omxplayer -o hdmi omxpipe

-o hdmiが効かないような気がします.付けても内蔵の3.5mmから音が出る.
##id/passwordは~/.netrcに書けます(-n option)

そんなこんなで色々遊べます :)

自分で導入するのがめんどくさいという人は明日明後日に開催されるオープンソースカンファレンス2016 Tokyo/Springに行くと現物が触れると思います.ステッカーももらえるしRaspberry JAMもあります.是非参加しましょう.

DDoSを食らって困る

前のblogを書いて投稿しようとこのsiteにアクセスしたら繋がりません.moshでも繋がらなくてserial経由だと繋がるけどサーバから外に出られません.
まさか料金支払い失敗して止められたとか?と思ってメールを確認するとこんなメールが.

お客様ご利用の以下IPアドレスに対して、外部からDoSアタックを受けている状態
を検知いたしました。
 
  IPアドレス    :nnn.nnn.nnn.nnn
 
この影響により、他のお客様のサービスが正常にご利用できない状態となる恐れ
がございましたため、上記のIPアドレス通信を遮断いたしました。
 
  DoSアタック検知時刻  :2016年02月24日 04時36分04秒
  通信遮断時刻         :2016年02月24日 04時36分10秒
 
現在は 49.212.8.40 に対しての通信の疎通性が取れない状態となっております。
 
通信遮断処理の解除につきましては、弊社にてDoSアタックの収束を確認後に実施
いたします。設定の解除後に再度メールにてご報告差し上げます。
 
緊急の措置でございましたため、事後のご報告となりましたこと深くお詫び
申し上げます。

メールのタイムスタンプは04:38:16.
デイリーバックアップは取れて手元のサーバにあるので別サーバで立てなおそうかとも思ったのですが,名前でDoSをかけてるなら一緒かと思い待つことに.

そして解除.

お客様ご利用の以下IPアドレスに対して発生したDoSアタックにつきまして、攻撃
が収束したことを確認いたしましたため、攻撃対象であるお客様IPアドレスの通信
遮断処理を解除いたしました。
 
  IPアドレス    :nnn.nnn.nnn.nnn
 
  DoSアタック検知時刻   :2016年02月24日 04時36分04秒
  通信遮断処理解除時刻  :2016年02月24日 08時46分18秒
 
この度の対応では、DoSアタックの影響により他のお客様サービスにも正常に通信
ができない状態となる恐れがあったため、緊急の措置として実施させていただきま
した。
 
なお、再度DoSアタックが発生し、他のお客様サービスにも影響が及ぶ恐れがある
場合につきましては、改めて同様の対応を行わせていただく場合がございます。
 
誠に恐れ入りますが、何卒ご理解を賜りますようお願い申し上げます。

メールのタイムスタンプは08:47:26.
4時間と少しのダウンでした.

このsiteはこのアクセスの殆ど無い技術blogくらいしかコンテンツ無いのでDoS食らう心当たりがありません.
もう来ないことを祈りましょう…….

ブートUSBメモリなどを作るmkusbを試してみる

USBメモリなどにisoを書き込んで起動デバイスを作れるとても便利なUNetbootinというツールがあります.
しかし,Debian jessie/stretchに入っていません.

なんでだろうとBTSを見るとうまく動かないバグがあるようです.(UEFI環境でNG?)

ざざっと眺めていてmkusbという同じようなツールがあるのを見かけたので試してみました.

環境

Debian stretch testing amd64です.

$ screenfetch
         _,met$$$$$gg.           mk@x220
      ,g$$$$$$$$$$$$$$$P.        OS: Debian testing-updates sid
    ,g$$P""       """Y$$.".      Kernel: x86_64 Linux 4.3.0-1-amd64
   ,$$P'              `$$$.      Uptime: 9h 7m
  ',$$P       ,ggs.     `$$b:    Packages: 3622
  `d$$'     ,$P"'   .    $$$     Shell: bash 4.3.42
   $$P      d$'     ,    $$P     Resolution: 1366x768
   $$:      $$.   -    ,d$$'     WM: Awesome
   $$\;      Y$b._   _,d$P'      WM Theme: awesome
   Y$$.    `.`"Y$$$$P"'          CPU: Intel Core i5-2540M CPU @ 3.3GHz
   `$$b      "-.__               GPU: Mesa DRI Intel(R) Sandybridge Mobile
    `Y$$                         RAM: 9768MiB / 15934MiB
     `Y$$.                      
       `$$b.                    
         `Y$$b.                 
            `"Y$b._             
                `""""           
 

Ubuntuはppaがあります.DebianはUbuntuのppaが使えます.他のLinuxディストリビューションでは導入スクリプト( mkusb-installer )が用意されています.

導入(ppa)

source.listを登録します.apt edit-sourcesコマンドでdeb http://ppa.launchpad.net/mkusb/ppa/ubuntu trusty mainを登録します.

$ sudo apt edit-sources mkusb
$ sudo chmod +r /etc/apt/sources.list.d/mkusb.list
$ cat /etc/apt/sources.list.d/mkusb.list
# "mkusb/install-to-debian - Community Help Wiki"
https://help.ubuntu.com/community/mkusb/install-to-debian
deb http://ppa.launchpad.net/mkusb/ppa/ubuntu trusty main
$ gpg --keyserver keyserver.ubuntu.com --recv-keys 54B8C8AC
gpg: 鍵54B8C8ACをhkpからサーバkeyserver.ubuntu.comに要求
gpg: 鍵54B8C8AC: 公開鍵"Launchpad PPA for MKUSB"をインポートしました
gpg:           処理数の合計: 1
gpg:             インポート: 1  (RSA: 1)
$ gpg --fingerprint 54B8C8AC
pub   4096R/54B8C8AC 2014-08-14
 フィンガー・プリント = 29D7 6ADA 2D15 A87B F4C6  8B82 3729 8274 54B8 C8AC
uid                  Launchpad PPA for MKUSB
 
$ gpg -a --export 54B8C8AC | sudo apt-key add -
OK
$ apt-key list|grep -A1 54B8C8AC
pub   4096R/54B8C8AC 2014-08-14
uid                  Launchpad PPA for MKUSB

パッケージリストの更新とmkusbパッケージの導入

$ sudo apt update
$ sudo apt install mkusb mkusb-nox
$ dpkg -L mkusb
/.
/usr
/usr/share
/usr/share/mkusb
/usr/share/mkusb/mkusb-start
/usr/share/mkusb/restore
/usr/share/mkusb/mkusb-st2
/usr/share/mkusb/usb-pack_efi.tar.gz
/usr/share/mkusb/grub.cfg
/usr/share/mkusb/maybe-problems.txt
/usr/share/mkusb/backup
/usr/share/icons
/usr/share/icons/mkusb.svg
/usr/share/icons/hicolor
/usr/share/icons/hicolor/scalable
/usr/share/icons/hicolor/scalable/apps
/usr/share/icons/hicolor/scalable/apps/mkusb.svg
/usr/share/icons/hicolor/48x48
/usr/share/icons/hicolor/48x48/apps
/usr/share/icons/hicolor/48x48/apps/mkusb.png
/usr/share/doc
/usr/share/doc/mkusb
/usr/share/doc/mkusb/README.Debian
/usr/share/doc/mkusb/copyright
/usr/share/doc/mkusb/changelog.Debian.gz
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/mkusb.8.gz
/usr/share/applications
/usr/share/applications/mkusb.desktop
/usr/sbin
/usr/sbin/mkusb
$ dpkg -L mkusb-nox
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/mkusb-nox
/usr/share/doc/mkusb-nox/copyright
/usr/share/doc/mkusb-nox/changelog.Debian.gz
/usr/sbin
/usr/sbin/mkusb-nox

実行例

メニューから起動するか,

$ sudo -H /usr/sbin/mkusb

のようにして起動します.書き込むイメージが決まっている場合は引数に指定できます.イメージには.gzや.xzも指定可能なので展開の手間が省けます.

$ sudo -H /usr/sbin/mkusb ./alpine-3.3.1-x86_64.iso

スプラッシュが出て,

20160224_06:02:32-32496
20160224_06:02:36-32565

メニューが出てきます.cloneやwipeも可能です.
20160224_06:02:45-32658

書き込み先のデバイスは間違えないようにしましょう.間違えるととても悲しいことになります.ちなみにSD Cardスロットの/dev/mmcblk0は検出されませんでした.USB-SDアダプタ経由だと出てきました.
20160224_06:02:26-868
20160224_06:02:43-1237

確認画面でチェックを入れて「Go」ボタンで書き込みが始まります.
20160224_06:02:05-2732
20160224_06:02:13-2827
20160224_06:02:17-2960

実行例(nox)

mkusb-noxコマンドを使うと端末で利用できます.nox版では複数のUSBメモリがある場合の選択方法はわかりませんでした.書き込むデバイスだけを差し込むようにするしか無いかもしれません.

$ sudo /usr/sbin/mkusb-nox ./alpine-3.3.1-x86_64.iso
The iso file SHOULD BE loop mounted on a temporary file READ-ONLY:
mount: /dev/loop0 is write-protected, mounting read-only
disk_name_type=label
default grsec|label grsec| _found_ in iso-file
default grsec|label grsec| _found_ in /dev/sdb
 Final checkpoint
Install to /dev/sdb? (y/n)
y
pv "alpine-3.3.1-x86_64.iso"| dd of=/dev/sdb bs=4096 ...
  82MiB 0:00:00 [ 205MiB/s] [========================================================================================================================>] 100%            
20992+0 records in
20992+0 records out
85983232 bytes (86 MB) copied, 4.84297 s, 17.8 MB/s
syncing the drive ...
The default grsec|label grsec| USB device is re-cloned  :-)

問題なく利用できる場合はUNetbootinの方がマルチプラットホームだし使いやすそうです.状況により使い分けるのがいいのかもしれません.

Linux環境でAndroidアプリを利用できるShashlikを試す

Linuxデスクトップ環境でAndroidアプリを利用できるShashlikを試してみました.
Shashlikを導入してAndroidパッケージの.apkを導入すると通常のLinuxアプリケーションのように呼び出せるというものです.
ただし,.apkはx86サポートのものでないといけないようです.
現在は0.9.1が最新で,Kubuntu(KDE Plasma 5)向けとなっています.

以下はShashlikを使ってFlappy Birdが動いている動画です.

Shashlikの導入

今は.debが配布されているのでこれをダウンロードして導入します.入手場所は以下のページから.140MBと結構大きいです.

$ wget http://static.davidedmundson.co.uk/shashlik/shashlik_0.9.1.deb
$ sudo dpkg -i shashlik_0.9.1.deb

/opt/shashlik以下に導入されます.qemuで動くみたいですね.

$ dpkg -L shashlik
/.
/opt
/opt/shashlik
/opt/shashlik/android
/opt/shashlik/android/emulator-user.ini
/opt/shashlik/android/system
/opt/shashlik/android/system/build.prop
/opt/shashlik/android/config.ini
/opt/shashlik/android/kernel-qemu
/opt/shashlik/android/system.img
/opt/shashlik/android/ramdisk.img
/opt/shashlik/android/userdata.img
/opt/shashlik/bin
/opt/shashlik/bin/aapt
/opt/shashlik/bin/ddms
/opt/shashlik/bin/shashlik-install
/opt/shashlik/bin/bios.bin
/opt/shashlik/bin/constants.py
/opt/shashlik/bin/shashlik-run
/opt/shashlik/bin/adb
/opt/shashlik/bin/vgabios-cirrus.bin
/opt/shashlik/bin/emulator64-x86
/opt/shashlik/data
/opt/shashlik/data/shashlik-apps.directory
/opt/shashlik/data/shashlik.png
/opt/shashlik/lib
/opt/shashlik/lib/libc++.so
/opt/shashlik/lib64
/opt/shashlik/lib64/lib64GLES_V2_translator.so
/opt/shashlik/lib64/lib64EGL_translator.so
/opt/shashlik/lib64/lib64OpenglRender.so
/opt/shashlik/lib64/libGLES_V2_translator.so
/opt/shashlik/lib64/lib64GLES_CM_translator.so
/opt/shashlik/lib64/libGLES_CM_translator.so
/opt/shashlik/lib64/libEGL_translator.so
/opt/shashlik/lib64/libut_rendercontrol_dec.so
/opt/shashlik/lib64/libOpenglRender.so

Androidアプリのパッケージを入手

Shashlikの上で動かすAndroidアプリのパッケージを入手します.

Once installed grab any Android application package (APK) from the net.
For example our favourite app, Flappy Bird, can be found here: http://beste-apps.chip.de/android/app/flappy-bird-apk-android-app,cxo.66885070/

ということでここからFlappy Birdを入手しました.

Androidアプリの導入

shashlik-installコマンドを使ってAndroidアプリを導入します.

$ /opt/shashlik/bin/shashlik-install ~/Downloads/com.dotgears.flappybird.apk
Successfully installed Flappy Bird
Connecting to deprecated signal QDBusConnectionInterface::serviceOwnerChanged(QString,QString,QString)
QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave.
QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave.
kbuildsycoca4 running...
kbuildsycoca4(19354) VFolderMenu::loadDoc: Parse error in  "/home/mk/.config/menus/applications-merged/xdg-desktop-menu-dummy.menu" , line  1 , col  1 :  "unexpected end of file"
QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave.
QDBusConnection: session D-Bus connection created before QCoreApplication. Application may misbehave.
Successfully installed Flappy Bird

20160222_17:02:57-19417
これでKDE Plasma 5環境ならスタートメニューに登録されるはずです.

ちなみに,x86じゃない.apkを導入しようとするとこんな感じで怒られました.
20160222_18:02:13-5944

Androidアプリの起動

KDE Plasma 5環境ならスタートメニューに登録されているはずですが,今の環境はawesomeなのでメニューに出てきません.
コマンドラインから起動します.

$ /opt/shashlik/bin/shashlik-run com.dotgears.flappybird FlappyBirds

起動にはそこそこ時間がかかります.

20160222_18:02:35-30707
20160222_18:02:52-31990
20160222_18:02:15-344

起動した後はもたつきなどもなく普通に動く感じです.
ただ,真っ黒な画面のままで起動に失敗することがあります.起動が速くなって安定して動くようになるととても便利そうです.

しかし問題は.apkの入手先ですね.PlayStoreが使えないと苦労しそうです.


Linux Mintのisoファイル改竄と改竄の確認方法


うわぁ……
怖すぎる.

2/20に入手した人はisoファイルを削除.もしOS導入済みの人はネットワークから遮断して必要なデータがあればバックアップの上初期化して導入しなおし(勿論再度入手しなおしたisoファイルで),メールやWebサービス等を利用していたならそちらのパスワード等の変更もとのこと.

入手したisoファイルの確認方法がMD5の方法しか書かれていませんね.
署名ファイルはないのでしょうか?

ftp siteを覗いてみると,

$ w3m -dump http://mirrors.kernel.org/linuxmint/stable/17.3/
Index of /linuxmint/stable/17.3/
 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 
../
linuxmint-17.3-cinnamon-32bit.iso                  30-Nov-2015 10:14      1G
linuxmint-17.3-cinnamon-64bit.iso                  28-Nov-2015 18:18      1G
linuxmint-17.3-cinnamon-nocodecs-32bit.iso         30-Nov-2015 21:06      1G
linuxmint-17.3-cinnamon-nocodecs-64bit.iso         30-Nov-2015 18:10      1G
linuxmint-17.3-cinnamon-oem-64bit.iso              01-Dec-2015 09:31      2G
linuxmint-17.3-kde-32bit.iso                       05-Jan-2016 22:57      2G
linuxmint-17.3-kde-64bit.iso                       05-Jan-2016 21:26      2G
linuxmint-17.3-mate-32bit.iso                      30-Nov-2015 10:31      1G
linuxmint-17.3-mate-64bit.iso                      28-Nov-2015 18:19      2G
linuxmint-17.3-mate-nocodecs-32bit.iso             01-Dec-2015 02:43      1G
linuxmint-17.3-mate-nocodecs-64bit.iso             01-Dec-2015 01:01      2G
linuxmint-17.3-mate-oem-64bit.iso                  01-Dec-2015 10:42      2G
linuxmint-17.3-xfce-32bit.iso                      05-Jan-2016 16:41      1G
linuxmint-17.3-xfce-64bit.iso                      05-Jan-2016 15:48      1G
md5sum.txt                                         06-Jan-2016 16:00     958
sha256sum.txt                                      06-Jan-2016 16:03    1406
sha256sum.txt.gpg                                  06-Jan-2016 16:09     181
 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

sha256sum.txt.gpgはあるよう.恐らくsha256sum.txtへの署名ですね.これを入手して確認してみます.

先ずはファイルの入手

$ wget http://mirrors.kernel.org/linuxmint/stable/17.3/sha256sum.txt wget http://mirrors.kernel.org/linuxmint/stable/17.3/sha256sum.txt.gpg

署名を確認してみると,DSA鍵ID 0FF405B2で署名されているよう.

$ gpg --verify sha256sum.txt.gpg sha256sum.txt
gpg: 2016年01月07日 01時06分20秒 JSTにDSA鍵ID 0FF405B2で施された署名
gpg: 署名を検査できません: 公開鍵が見つかりません

鍵サーバから鍵を検索してインポートします.

$ gpg --search-keys 0FF405B2
gpg: "0FF405B2"をhkpサーバkeys.gnupg.netから検索
(1)     Clement Lefebvre (Linux Mint Package Repository v1) <root@linuxmint.co
          1024 bit DSA key 0FF405B2, 作成: 2009-04-29
Keys 1-1 of 1 for "0FF405B2".  番号(s)、N)次、またはQ)中止を入力してください >1
gpg: 鍵0FF405B2をhkpからサーバkeys.gnupg.netに要求
gpg: 鍵0FF405B2: 公開鍵"Clement Lefebvre (Linux Mint Package Repository v1) <root@linuxmint.com>"をインポートしました
gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル
gpg: 深さ: 0  有効性:  15  署名:  52  信用: 0-, 0q, 0n, 0m, 0f, 15u
gpg: 深さ: 1  有効性:  52  署名:  59  信用: 52-, 0q, 0n, 0m, 0f, 0u
gpg: 次回の信用データベース検査は、2018-07-07です
gpg:           処理数の合計: 1
gpg:             インポート: 1

署名を検証すると,DSA鍵ID 0FF405B2で署名された鍵ということがわかります.
※ちなみにこの鍵IDと鍵指紋の確認もしたいのですが,その情報の載っているであろうlinuxmintのsiteは今落ちているようで未確認です.

$ gpg --verify sha256sum.txt.gpg sha256sum.txt
gpg: 2016年01月07日 01時06分20秒 JSTにDSA鍵ID 0FF405B2で施された署名
gpg: "Clement Lefebvre (Linux Mint Package Repository v1) <root@linuxmint.com>"からの正しい署名
gpg: *警告*: この鍵は信用できる署名で証明されていません!
gpg:       この署名が所有者のものかどうかの検証手段がありません。
主鍵フィンガー・プリント: E1A3 8B8F 1446 75D0 60EA  666F 3EE6 7F3D 0FF4 05B2

チェックサムファイルの署名が正しいことが確認できたら,isoファイルのチェックサムを確認します.これでダウンロードされたisoファイルが正しくダウンロードされたことがわかります.
今回はisoファイルは1つしか入手していません.
入手したlinuxmint-17.3-xfce-32bit.isoの確認が行われ,完了と言われています.

$ ls linuxmint*.iso
linuxmint-17.3-xfce-32bit.iso
$ sha256sum -c sha256sum.txt
sha256sum: linuxmint-17.3-cinnamon-32bit.iso: そのようなファイルやディレクトリはありません
linuxmint-17.3-cinnamon-32bit.iso: オープンまたは読み込みに失敗しました
sha256sum: linuxmint-17.3-cinnamon-64bit.iso: そのようなファイルやディレクトリはありません
linuxmint-17.3-cinnamon-64bit.iso: オープンまたは読み込みに失敗しました
sha256sum: linuxmint-17.3-mate-32bit.iso: そのようなファイルやディレクトリはありません
linuxmint-17.3-mate-32bit.iso: オープンまたは読み込みに失敗しました
sha256sum: linuxmint-17.3-mate-64bit.iso: そのようなファイルやディレクトリはありません
linuxmint-17.3-mate-64bit.iso: オープンまたは読み込みに失敗しました
sha256sum: linuxmint-17.3-cinnamon-nocodecs-32bit.iso: そのようなファイルやディレクトリはありません
linuxmint-17.3-cinnamon-nocodecs-32bit.iso: オープンまたは読み込みに失敗しました
sha256sum: linuxmint-17.3-cinnamon-nocodecs-64bit.iso: そのようなファイルやディレクトリはありません
linuxmint-17.3-cinnamon-nocodecs-64bit.iso: オープンまたは読み込みに失敗しました
sha256sum: linuxmint-17.3-mate-nocodecs-32bit.iso: そのようなファイルやディレクトリはありません
linuxmint-17.3-mate-nocodecs-32bit.iso: オープンまたは読み込みに失敗しました
sha256sum: linuxmint-17.3-mate-nocodecs-64bit.iso: そのようなファイルやディレクトリはありません
linuxmint-17.3-mate-nocodecs-64bit.iso: オープンまたは読み込みに失敗しました
sha256sum: linuxmint-17.3-cinnamon-oem-64bit.iso: そのようなファイルやディレクトリはありません
linuxmint-17.3-cinnamon-oem-64bit.iso: オープンまたは読み込みに失敗しました
sha256sum: linuxmint-17.3-mate-oem-64bit.iso: そのようなファイルやディレクトリはありません
linuxmint-17.3-mate-oem-64bit.iso: オープンまたは読み込みに失敗しました
sha256sum: linuxmint-17.3-kde-32bit.iso: そのようなファイルやディレクトリはありません
linuxmint-17.3-kde-32bit.iso: オープンまたは読み込みに失敗しました
sha256sum: linuxmint-17.3-kde-64bit.iso: そのようなファイルやディレクトリはありません
linuxmint-17.3-kde-64bit.iso: オープンまたは読み込みに失敗しました
linuxmint-17.3-xfce-32bit.iso: 完了
sha256sum: linuxmint-17.3-xfce-64bit.iso: そのようなファイルやディレクトリはありません
linuxmint-17.3-xfce-64bit.iso: オープンまたは読み込みに失敗しました
sha256sum: 警告: 一覧にある 13 個のファイルが読み込めませんでした
 

ちなみにダウンロードが途中で終了してしまったり何らかの理由で壊れてしまった場合などは以下のように失敗と言われます.

$ echo 'a'>> linuxmint-17.3-xfce-32bit.iso
$ sha256sum -c sha256sum.txt
  :
linuxmint-17.3-xfce-32bit.iso: 失敗
  :
sha256sum: 警告: 1 個の計算したチェックサムが一致しませんでした

このあたりのことは以下のページの説明が解りやすいと思います.

<追記>
フォーラムもやられてるらしいです……

</追記>

cronに特化したPodcastアグリゲータ/ダウンローダのpodgetを試す

先日試したpodracerは何気に10年前のソフトでメンテナンスもされていないし,起動中に強制終了するとゴミが残って次から起動しなくなったりとかとか結構不満点が出てきました.

今は前処理を以下のようにして,

if [ $(pgrep podracer) ] ; then
  echo 'running podracer.'
  exit -1
fi
 
echo run podracer
if [ -f ~/.podracer/tempsub ] ; then
  rm ~/.podracer/tempsub
  echo 'rm tempsub'
fi

プレイリストもこんな感じで別に作ってます.

cd ~/podcasts
PODCASTLIST=($(cd ~/podcasts ; find . -mmin -$LISTTIME -type f -print0 | xargs -0n1 file | grep -i audio | cut -f1 -d:))
if [ ${#PODCASTLIST[@]} -eq 0 ] ; then
  echo 'podcast not found.'
  exit -1;
fi
 
echo num = ${#PODCASTLIST[@]}
ls -1tr ${PODCASTLIST[@]} > ~/podcasts/todayspodcast.m3u

後者はDebianの方にはバグ報告をしていますが音沙汰がない感じです.

他にないかなーと探して(apt-cache search podcast)podgetというものを見つけました.

$ apt show podget | grep -A99 Description:
 
Description: cron 用に最適化された Podcast アグリゲータ/ダウンローダ
 Podget はシンプルな podcast アグリゲータであり、定期的なバックグランドジョブ
 (すなわち cron) として起動するために最適化されています。RSS および XML フィード
 からの podcast のダウンロード、ファイルをソートしてフォルダやカテゴリごとに格納、
 iTunes PCAST ファイルおよび OPML リストからの URL のインポート、M3U および ASX
 プレイリストの自動生成、そして古くなったファイルの自動クリーンアップのサポート
 が特徴です。また、MS Windows サーバ上にホストされた podcast の UTF-16 自動変換も
 特徴です。
 podget を一旦起動すると、ユーザ設定ファイルを $HOME/.podget にインストール
 しますので、そのファイルをカスタマイズできます。

cronに特化していて便利そうなので試してみます.

導入

Debian stretch testing/Rasbian jessie/Ubuntu 14.04 で確認しました.

$ sudo apt install podget

初期化

$ podget -h
 
Usage /usr/bin/podget [options]
 
    -c --config <FILE>           Name of configuration file.
    -C --cleanup                 Skip downloading and only run cleanup loop.
    --cleanup_simulate           Skip downloading and simulate running
                                 cleanup loop.
                                 Display files to be deleted.
    --cleanup_days               Number of days to retain files.  Anything
                                 older will be removed.
    -d --dir_config <DIRECTORY>  Directory that configuration files are
                                 stored in.
    -f --force                   Force download of items from each feed even
                                 if they have already been downloaded.
    --import_opml <FILE or URL>  Import servers from OPML file or
                                 HTTP/FTP URL.
    --import_pcast <FILE or URL> Import servers from iTunes PCAST file or
                                 HTTP/FTP URL.
    -l --library <DIRECTORY>     Directory to store downloaded files in.
    -p --playlist-asx            In addition to the default M3U playlist,
                                 create an ASX Playlist.
    -r --recent <count>          Download only the <count> newest items from
                                 each feed.
    --serverlist <list>          Serverlist to use.
    -s --silent                  Run silently (for cron jobs).
    --verbosity <LEVEL>          Set verbosity level (0-4).
    -v                           Set verbosity to level 1.
    -vv                          Set verbosity to level 2.
    -vvv                         Set verbosity to level 3.
    -vvvv                        Set verbosity to level 4.
    -h --help                    Display help.

初回起動時に設定ファイルなどが作成されます.引数無しで実行すると初期設定の中のpodcastをダウンロードするので--cleanup_simulateオプションを付けて実行すると良さそうです.
設定ファイルは規定値では~/.podget以下に作成されます.

$ podget --cleanup_simulate
$ ls -lA ~/.podget
合計 8
-rw-rw-r-- 1 mk mk 3652  2月 19 05:34 podgetrc
-rw-rw-r-- 1 mk mk 1131  2月 19 05:34 serverlist
  • podgetrc : 設定ファイル
  • serverlist : podcastのリスト

設定ファイルの用意

お好みで設定ファイルの~/podgetrcを編集します.私は以下の辺りを書き換えました.

ログファイルを有効に

# Directory to store logs in
dir_log=/home/mk/POD/LOG

プレイリストの年月日の形式を書き換え

# Date format for new playlist names
date_format=+%Y-%m-%d

Podcastの取得数を3つに

# Most Recent
# 0  == download all new items.
# 1+ == download only the <count> most recent
most_recent=3

サーバリストの作成

取得するPodcastを~/.podget/serverlistに書いていきます.

書式はスペース区切りで

URL カテゴリー 番組名

になっています.podgetを実行した時に
カテゴリー/番組名/番組というふうにディレクトリが掘られます.
具体的にはこんな感じで書いていきます.

http://feeds.feedburner.com/weblogs/csc tech 電脳空間カウボーイズ
http://feeds.backspace.fm/backspacefm tech backspace.fm
http://www.joqr.co.jp/science-podcast/index.xml science 日立ハイテクプレゼンツ 大村正樹のサイエンスキッズ
http://www.tbsradio.jp/life/rss.xml etc 文化系トークラジオ Life
http://www.tbsradio.jp/cycle-r/index.xml bike ミラクル・サイクル・ライフ
http://sokoani.com/feed anime そこあに
  :

他のアプリケーションらの移行でOPMLファイルのエクスポートが可能な場合はそのファイルやURLを元にインポートできるようです.※未確認

$ podget --import_opml <FILE or URL>

若しくはPCAST形式(iTunes向け?)も同様に利用できるようです.※未確認

$ podget --import_pcast <FILE or URL>

OPML書き出しの機能もあります.但しこの機能は
Ubuntu 14.04の0.6.9にはなく,
Rasbian jessieの0.7.3,
Debian stretchの0.7.9には存在しました.

$ podget --export_opml /tmp/podcast.opml
podget
 
Session file not found.  Creating podget.22189 .
 
Export serverlist to OPML file: /tmp/podcast.opml
 
Closing session and removing lock file.
$ head /tmp/podcast.opml
<?xml version="1.0" encoding="utf-8" ?>
<opml version="1.0">
<head/>
<body>
<outline text="tech"><outline text="電脳空間カウボーイズ" type="rss" xmlUrl="http://feeds.feedburner.com/weblogs/csc" /></outline>
<outline text="tech"><outline text="backspace.fm" type="rss" xmlUrl="http://feeds.backspace.fm/backspacefm" /></outline>
<outline text="science"><outline text="日立ハイテクプレゼンツ 大村正樹のサイエンスキッズ" type="rss" xmlUrl="http://www.joqr.co.jp/science-podcast/index.xml" /></outline>
<outline text="etc"><outline text="文化系トークラジオ Life" type="rss" xmlUrl="http://www.tbsradio.jp/life/rss.xml" /></outline>
<outline text="bike"><outline text="ミラクル・サイクル・ライフ" type="rss" xmlUrl="http://www.tbsradio.jp/cycle-r/index.xml" /></outline>
<outline text="anime"><outline text="そこあに" type="rss" xmlUrl="http://sokoani.com/feed" /></outline>

実行

とりあえず引数無しで実行することでPodcastが取得できます.

$ podget
-------------------------------------------------
Category: anime         Name: そこあに
Downloading feed index from http://sokoani.com/feed
2016-02-19 07:37:15 URL:http://sokoani.com/feed [673868] -> "-" [1]
 
Downloading 0_s413.mp3 from http://sokoani.com/podpress_trac/feed/9818/0/
 :
 :

Podcastは規定値では~/POD以下にカテゴリ/番組名/番組ファイルの形で保存されます.

$ find ~/POD -type f | tail -3
/home/mk/POD/etc/JUNK 伊集院光 深夜の馬鹿力/files_20160216.mp3
/home/mk/POD/etc/JUNK 伊集院光 深夜の馬鹿力/files_20160202.mp3
/home/mk/POD/etc/JUNK 伊集院光 深夜の馬鹿力/files_20160209.mp3

また,~/POD/*.m3uとステプレイリストも作成されます.これは実行単位で作られるのかな?

$ ls -l ~/POD/*.m3u
-rw-rw-r-- 1 mk mk  946  2月 19 07:14 /home/mk/POD/New-2016-02-19.m3u
-rw-rw-r-- 1 mk mk 1924  2月 19 07:50 /home/mk/POD/New-2016-02-19.r2.m3u

うまく動作するようなら-sオプションを付けてcronに登録してあげると良さそうです.以下の例では毎時3分にpodgetを実行しています.

$ crontab -e
$ crontab -l | tail -2
# get podcast
3 * * * *       podget -s

podracerはPodcastを番組関係なく実行日のディレクトリに保存されてPodcast番組を探したりするのに不便でしたがpodgetだとカテゴリと番組でディレクトリが分かれるので便利です.
しばらく併用してみようと思います.

鹿児島Linux勉強会 2016.02 -02/20(土)鹿児島市-

20160216_21:02:28-3740

12月ぶりに開催されます.
会場はコワーキングスペースのTenonさん.
時間は16:00〜18:50です.

Tenonさんには電源,Wi-Fi,フリードリンクがあります.
※会場代として500円必要になります.

私は早めに行ってワンデイパス(700~1000円)で作業していると思います.
参加してみたい方は以下のページから申し込むか,

鹿児島らぐのMLでその旨メールしてみて下さい.

私はPodcast配信サーバの話をしようかと思っています.

絵文字を入力する-Mozc&emojione-picker-

Linux環境での絵文字入力方法です.新しい方法を知ったので紹介してみます.

Mozc利用

これまではこの方法を使っていました.Mozcの設定で「Unicode 6 絵文字変換」にチェックを付けると利用できるようになります.

20160216_23:02:52-2121

「えもじ」とか「ねこ」とか入力して変換出来ます.

20160217_07:02:28-3105

辞書に登録することも出来ます.

20160217_07:02:07-5247

emojione-picker for Ubuntu

今回知ったUbuntu向けの絵文字ピッカーです.実行するとタスクバーに常駐して入力したい絵文字を選んでクリックするとその絵文字がクリップボードにコピーされるのでクリップボード貼り付けで入力できます.

20160217_07:02:45-12768

チキンがクリップボードにコピーされたところ.

20160217_07:02:11-16960

いちいちメニューを辿るのは面倒ですが,Recentに最近使った絵文字が入るのでよく使うものはここからアクセスできます.

20160217_07:02:42-17641

Debian stretch testing への導入例

Ubuntu用ですがstretchにも入りました.ちなみにパッケージ化して導入しなくてもとりあえず動かすだけならgit cloneした後cd emojione-picker-ubuntu ; ./emojione-pickerとかでも動きました.

$ sudo apt install equivsequivs gir1.2-rsvg-2.0
$ git clone https://github.com/gentakojima/emojione-picker-ubuntu.git
$ cd emojione-picker-ubuntu
$ equivs-build debian_package.ctl
$ sudo dpkg -i emojione-picker_0.1_all.deb

という感じでLinux環境でも結構快適に絵文字が入力できるようになってきました.しかし絵文字は楽しいのですが環境によって見え方が大幅に変わるので意図したように伝わっているかとかが不安でもあります…….

絵文字を入力する-Mozc&emojione-picker-

Linux環境での絵文字入力方法です.新しい方法を知ったので紹介してみます.

Mozc利用

これまではこの方法を使っていました.Mozcの設定で「Unicode 6 絵文字変換」にチェックを付けると利用できるようになります.

20160216_23:02:52-2121

「えもじ」とか「ねこ」とか入力して変換出来ます.

20160217_07:02:28-3105

辞書に登録することも出来ます.

20160217_07:02:07-5247

emojione-picker for Ubuntu

今回知ったUbuntu向けの絵文字ピッカーです.実行するとタスクバーに常駐して入力したい絵文字を選んでクリックするとその絵文字がクリップボードにコピーされるのでクリップボード貼り付けで入力できます.

20160217_07:02:45-12768

チキンがクリップボードにコピーされたところ.

20160217_07:02:11-16960

いちいちメニューを辿るのは面倒ですが,Recentに最近使った絵文字が入るのでよく使うものはここからアクセスできます.

20160217_07:02:42-17641

Debian stretch testing への導入例

Ubuntu用ですがstretchにも入りました.ちなみにパッケージ化して導入しなくてもとりあえず動かすだけならgit cloneした後cd emojione-picker-ubuntu ; ./emojione-pickerとかでも動きました.

$ sudo apt install equivsequivs gir1.2-rsvg-2.0
$ git clone https://github.com/gentakojima/emojione-picker-ubuntu.git
$ cd emojione-picker-ubuntu
$ equivs-build debian_package.ctl
$ sudo dpkg -i emojione-picker_0.1_all.deb

という感じでLinux環境でも結構快適に絵文字が入力できるようになってきました.しかし絵文字は楽しいのですが環境によって見え方が大幅に変わるので意図したように伝わっているかとかが不安でもあります…….

GNU Coreutils 8.25でlsの出力が変わったのを試してみる

DebuanのMLで知ったのですが,Coreutils 8.25lsの出力結果が変わっています.

この変更はlsコマンドを使ったscriptなどが影響を受けそうと思ったのですが端末でのみの変更のようで一安心.
Debian stretch testingでちょっと試しに動かしてみました.
Debian jessie/Ubuntu 14.04以降も同じ手順で行けると思います.

開発環境の導入

$ sudo apt install build-essential
$ sudo apt build-dep coreutils

Coreutils 8.25の入手と署名確認

$ wget ftp://ftp.gnu.org/gnu/coreutils/coreutils-8.25.tar.xz ftp://ftp.gnu.org/gnu/coreutils/coreutils-8.25.tar.xz.sig
$ gpg --verify coreutils-8.25.tar.xz.sig
gpg: 署名されたデータが'coreutils-8.25.tar.xz'にあると想定します
gpg: 2016年01月20日 20時17分46秒 JSTにRSA鍵ID 306037D9で施された署名
gpg: "Pádraig Brady <P@draigBrady.com>"からの正しい署名
gpg:                 別名"Pádraig Brady <pixelbeat@gnu.org>"
gpg: *警告*: この鍵は信用できる署名で証明されていません!
gpg:       この署名が所有者のものかどうかの検証手段がありません。
主鍵フィンガー・プリント: 6C37 DC12 121A 5006 BC1D  B804 DF6F D971 3060 37D9

展開とビルド

$ tar xf coreutils-8.25.tar.xz
$ cd coreutils-8.25
$ ./configure --prefix=$HOME/usr/local
$ make

端末でのlsの動作比較

今パスの通っているのは8.24で,src/ls8.25

$ ls --version
ls (GNU coreutils) 8.24
Copyright (C) 2015 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
 
作者 Richard M. Stallman および David MacKenzie。
$ src/ls --version
ls (GNU coreutils) 8.25
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
 
Written by Richard M. Stallman and David MacKenzie.

スペースの含まれたファイルを作成してlsを実行すると8.25のlsでは'で括られる.

$ touch /tmp/hoge\ fuga
$ ls /tmp/hoge\ fuga
/tmp/hoge fuga
$ src/ls /tmp/hoge\ fuga
'/tmp/hoge fuga'

日本語は大丈夫だが,エスケープの必要な文字も括られる.

$ touch /tmp/日本語 /tmp/エスケープの必要な記号\?
$ src/ls /tmp/日本語 /tmp/他の記号\?
'/tmp/他の記号?'  /tmp/日本語

パイプでの動作確認

パイプを通るとこれまでどおりの動作

$ src/ls /tmp/hoge\ fuga | cat
/tmp/hoge fuga

なので,xargsなどで処理したい場合はこれまでどおり

$ src/ls /tmp/hoge\ fuga | xargs cat
cat: /tmp/hoge: そのようなファイルやディレクトリはありません
cat: fuga: そのようなファイルやディレクトリはありません
$ src/ls /tmp/hoge\ fuga | xargs -I{} cat "{}"

回避方法x3

$ src/ls --quoting-style=literal /tmp/hoge\ fuga /tmp/エスケープの必要な記号\?
/tmp/hoge fuga  /tmp/エスケープの必要な記号?
$ src/ls -N /tmp/hoge\ fuga /tmp/エスケープの必要な記号\?
/tmp/hoge fuga  /tmp/エスケープの必要な記号?
$ QUOTING_STYLE=literal src/ls /tmp/hoge\ fuga /tmp/エスケープの必要な記号\?
/tmp/hoge fuga  /tmp/エスケープの必要な記号?

ということでとりあえずこれまでと同じ動作をさせたい場合はQUOTING_STYLE=literalを設定したりls -Naliasを設定しておくといいみたいです.

$ echo 'export QUOTING_STYLE=literal' >> ~/.bashrc

or

$ echo "alias ls='ls -N'" >> ~/.bashrc~/.bashrc

#ところでCoreutils 8.25でまたコマンドが一つ増えていました.今回は覚えやすいけど

** New commands

base32 is added to complement the existing base64 command,
and encodes and decodes printable text as per RFC 4648.

<追記>

DebianではSeverity: serious(重要度:深刻)となってsidの8.25-2no_ls_quoting.patchが入ってrevertされたようです.

$ bin/ls --version|head -1
ls (GNU coreutils) 8.25
$ bin/ls /tmp/hoge\ fuga 
/tmp/hoge fuga
$ cat patches/no_ls_quoting.patch
Description: revert inconsistent ls quoting
 This is a revert of upstream commit 109b9220cead6e979d22d16327c4d9f8350431cc.
 Info changed to reflect current upstream intentions.
 
Bug-Debian: https://bugs.debian.org/813164
 
--- coreutils-8.25.orig/NEWS
+++ coreutils-8.25/NEWS
@@ -71,9 +71,6 @@ GNU coreutils NEWS
   df now prefers sources towards the root of a device when
   eliding duplicate bind mounted entries.
 
-  ls now quotes file names unambiguously and appropriate for use in a shell,
-  when outputting to a terminal.
-
   join, sort, uniq with --zero-terminated, now treat '\n' as a field delimiter.
 
 ** Improvements
--- coreutils-8.25.orig/doc/coreutils.texi
+++ coreutils-8.25/doc/coreutils.texi
@@ -7750,8 +7750,8 @@ this"} in the default C locale.  This lo
 
 You can specify the default value of the @option{--quoting-style} option
 with the environment variable @env{QUOTING_STYLE}@.  If that environment
-variable is not set, the default value is @samp{shell-escape} when the
-output is a terminal, and @samp{literal} otherwise.
+variable is not set, the default value is @samp{literal}, but this
+default may change to @samp{shell-escape} in a future version of this package.
 
 @item --show-control-chars
 @opindex --show-control-chars
--- coreutils-8.25.orig/src/ls.c
+++ coreutils-8.25/src/ls.c
@@ -1581,7 +1581,6 @@ decode_switches (int argc, char **argv)
       if (isatty (STDOUT_FILENO))
         {
           format = many_per_line;
-          set_quoting_style (NULL, shell_escape_quoting_style);
           /* See description of qmark_funny_chars, above.  */
           qmark_funny_chars = true;
         }

</追記>