Python Boot CampテキストをUbuntu 16.04 LTSで試す

2017.10で告知のあった「Python Boot Camp in 鹿児島」で使う「Python Boot Campテキスト」を見るとLinuxはUbuntu 17.04 serverがターゲットになっている

1. Pythonをはじめる前に — Python Boot Camp Text 2016.04.28 ドキュメント

1.3.3. Linux (Ubuntu Server) での場合
ここではLinuxとしてUbuntu 17.04にPython3.6をインストールする方法を説明します。

LTSのDesktop使いたい人も居るだろうなとUbuntu 16.04 LTS arm64で一通り確認してみた

「1.3.3. Linux (Ubuntu Server) での場合」のPython導入は以下のように3.5に変更

$ sudo apt update && sudo apt upgrade -y
$ sudo apt -y install python3.5 python3.5-dev python3.5-venv
$ python3.5 -V
Python 3.5.2

「5.1.2. ファイルへの書き込み」でファイルの確認前にflushしないとファイルが空

>>> f.flush()

「5.1.5. 追記モードでの書き込み」でファイルの確認前にflushしないとファイルが更新されない

>>> f.flush()

後は問題無さそう

Debianの場合もstable(stretch)では同じだと思う.Python 3.6はtesting(Buster)以降になるみたい(未確認)

このチュートリアルはBeautifulSoupまでやるので例えばcalibrでニュースサイトをスクレイピングしてKindleに自動転送といったようなレシピも書けるようになりますね :)

鹿児島Linux勉強会 2017.10に参加

鹿児島らぐ鹿児島Linux勉強会 2017.10に参加してきました.

日時

2017-10-14(土) 14:00-17:00(準備撤収時間を含む)

会場

モノづくりスペース TUKUDDO
http://tukuddo.com/

例によって自転車でポタポタと桜島フェリー経由で移動.

火山灰や雨が心配でしたが,往路はどちらも問題なく快適でした.
フェリーでメールチェックをするとパケットが250MBを切ったとのメールが.確認すると残り54MB!想定外の減り方です.
確認するとIFTTTの写真連携がmobileで有効になっていたのが原因でした…….

フェリーで渡った後はイルカ眺めてはなまるうどんでかけうんどん食べて中町自転車等駐輪場に駐輪.ジュンク堂書店に寄って,ACアダプタを忘れたのでダイソーアオヤマで
200円のAC-USB変換を購入(会場の電源タップについていたのでいらなかった)
ダイソーアオヤマでは先月売っていた500円のLipoモバイルバッテリーは売り切れていて,300円の1860入りモバイルバッテリーは在庫豊富でした.
丸善とアニメイトも行きたかったけど時間がなくて断念.会場のTUKUDDOへ.

TUKUDDOでは電源アダプタとプロジェクタの用意.ここはプロジェクタにChromeCastが繋がっているので発表者が変わるたびにケーブルを繋ぎ直したりしなくていいので便利
です :)

参加者は途中参加者を含めて6人.内新規の方が1名いらっしゃいました.

発表内容は,

その他相談として,

などがありました.

自分の発表もう少し伸ばした方が良かったかもと思いつつ脱線しながら時間潰せました.
次回の日程の希望日は特に出ず,早く決めて欲しいという意見が.
とりあえずASNARO-2(イプシロン)打ち上げが延期になったので11/11(Sat)かなーとか言いつつ解散でした.

自分は自転車を回収して県立図書館で本を2冊借りて(キャリアつけ忘れたので少なめに)ニシムタに寄って垂水フェリー経由で帰宅しました.
垂水から雨と風が強くてちょっと難儀しました.雨風は自転車には辛いですね.

次回の情報などはSiteやMLで確認してください.

Vulsの特集あり

let’s encryptの更新が失敗して困る

$ sudo letsencrypt renew

2017-10-19 06:59:12,982:WARNING:letsencrypt.cli:Attempting to renew cert from /etc/letsencrypt/renewal/example.com.conf produced an unexpected error: 'server'. Skipping.

のようなエラーで証明書が更新できなかった. 他の設定ファイルに比べて容量が少ない.

$ ls -lA /etc/letsencrypt/renewal/
合計 20
-rw-r--r-- 1 root root 1873 10月 17 13:44 example2.com.conf
-rw-r--r-- 1 root root  483  7月 19 03:10 example.com.conf

設定ファイルに

server = https://acme-v01.api.letsencrypt.org/directory
config_file = None

をファイル末尾に追記して再度renewしたら通った

Raspberry Pi Zero Wのbluetoothを無効にする

てことでRaspberry Pi Zero WのBluetoothも無効にしたいなと.
環境はRaspbian stretch lite 2017-09-07で確認しました.

PCで設定した以下のblacklistの手順でもokなはずですが,config.txtで無効にする方法がありそうだと調べてみました.

まずは定番のeLinux

  • RPiconfig – eLinux.org

    There's lots more documentation of available overlays in /boot/config/README. See source on Github for more.

てことでGithubを見に行きます.

それらしいものがありました :)

Name:   pi3-disable-bt
Info:   Disable Pi3 Bluetooth and restore UART0/ttyAMA0 over GPIOs 14 & 15
        N.B. To disable the systemd service that initialises the modem so it
        doesn't use the UART, use 'sudo systemctl disable hciuart'.
Load:   dtoverlay=pi3-disable-bt
Params: <None>

早速設定してみます.

$ echo 'dtoverlay=pi3-disable-bt' | sudo tee -a /boot/config.txt
dtoverlay=pi3-disable-bt

な感じで /boot/config.txt に追記して再起動しました.
lsmodを設定前と比較するとこんな感じで居なくなっています.

$ diff lsmod lsmod_pi3-disable-bt
2,6d1
< cmac                    3134  1
< bnep                   11949  2
< hci_uart               21190  1
< btbcm                   7885  1 hci_uart
< bluetooth             374820  24 hci_uart,bnep,btbcm
9d3
< snd_bcm2835            23131  0
10a5,6
> snd_bcm2835            23131  0
> rfkill                 21373  4 cfg80211
12d7
< rfkill                 21373  6 bluetooth,cfg80211
16d10
< fixed                   3029  0
18a13
> fixed                   3029  0

moduleのblacklistを設定するよりお手軽ですね :)

恐らくRaspberry Pi 3 Bでも同様の設定は使えると思います.(持ってないので未確認)

bluetoothを無効にする(Debian sid amd64)

Bluetooth経由でスマホからPCまで乗っ取れる攻撃手法が発覚 ~Bluetoothがオンになっているだけで攻撃可能 – PC Watch

BT搭載デバイスは、ペアリング済みのデバイスだけでなく、つねにあらゆるデバイスからの着信接続を探知しているため、デバイスをまったくペアリングせずにBT接続を確立できる。このため、BlueBorneは攻撃を検知されない潜在的攻撃となっている。

 BlueBorne攻撃では、まず周囲のアクティブなBT接続を探知する。このさい、ペアリングのための「発見可能」モードでなくても、BTがオンになっていれば識別が可能となる。

とても怖いです.
手元の端末ではPCとAndroidをBluetoothテザリングをよく利用しています.

PCの対応状況を確認(2017-09-13時点)すると,Debianは未だ未対応.Ubuntuは14.04 LTS, 16.04 LTS, 17.04がリリース済みでした.

とりあえず,手元で使っているDebian sid amd64とRaspberry Pi Zero WのRaspbian stretchでBluetoothを無効にしておくことにしました.


blueman-appletで設定

PCではblueman-appletを利用しています.
システムトレイ上のアイコンを右クリックして
Turn off Bluetooth
を行うと無効に出来てBluetoothのLEDも消灯します.
でも再起動でOnになるので起動のたびに設定しないといけない&そのタイミングで攻撃をされるかもしれないのであまりよろしくない感じがします.


moduleをblucklistに入れて無効にする

Bluetoothのモジュールを読み込まないようにしてみます.これならBluetoothは動作しないはずです.

まずはlsmodコマンドでbluetooth関連モジュールを確認します.手元のLenovo x200の場合は以下のようになりました.

x200のbluetooth module確認

$ lsmod|grep -i bluetooth
bluetooth             544768  14 btrtl,btintel,bnep,btbcm,rfcomm,btusb
crc16                  16384  2 bluetooth,ext4
rfkill                 24576  6 bluetooth,thinkpad_acpi,cfg80211

モジュールをロードしないように /etc/modprobe.d/blacklist.conf というファイルに blacklist <modulename> という形式で書いていきます.

x200 blacklistに設定

$ echo 'blacklist btrtl
> blacklist btintel
> blacklist bnep
> blacklist btbcm
> blacklist rfcomm
> blacklist btusb
> blacklist bluetooth' | sudo tee -a /etc/modprobe.d/blacklist.conf

設定したら再起動してモジュールが読み込まれないのを確認します.

再起動してmoduleがloadされないのを確認

$ lsmod|grep -i bluetooth

しかしPCのBluetooth LEDインジケーターが消えません.動作上は問題ないでしょうけどちょっと気持ち悪いです.
GPIO辺り探すと消せそうですが面倒.


BIOSで無効にする

PCによっては設定できないかもですが,BIOSで無効にします.これだとLEDインジケーターも光らないので良い感じです.


https://farm5.staticflickr.com/4435/37206157365_ab607c3943.jpg


物理的にモジュールを取り外す

これが一番確実でしょうがそう待たずにセキュリティ修正は降りてくると思うので今回は見送りました.

wgetの再試行オプション

楽しみにしていたRaspbianのダウンロードが止まってました.
停電やルーター不調とかで回線イマイチなのです.

なのでwgetcとか適当なscriptを用意して

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/sh

if [ $# -eq 0 ]; then
  echo "$0 URL" 1>&2
  exit 1
fi

while :
do

wget -c $1

if [ "$?" -eq 0 ]; then
  echo "Done!" 1>&2
  exit 0;
fi

sleep 1

done

chmod +x してこんな感じでダウンロード

$ wgetc http://vx2-downloads.raspberrypi.org/raspbian/images/raspbian-2017-09-08/2017-09-07-raspbian-stretch.zip ; wgetc http://vx2-downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2017-09-08/2017-09-07-raspbian-stretch-lite.zip ; sha256sum raspbian*.zip

3回ほどの試行でどうにか終わってました.

そして返り値ちゃんと確認するかとwgetのmanを見たら…….

       --retry-connrefused
           Consider "connection refused" a transient error and try again.  Normally Wget gives up on a URL when it is unable to connect to the site
           because failure to connect is taken as a sign that the server is not running at all and that retries would not help.  This option is for
           mirroring unreliable sites whose servers tend to disappear for short periods of time.
       --waitretry=seconds
           If you don't want Wget to wait between every retrieval, but only between retries of failed downloads, you can use this option.  Wget will use
           linear backoff, waiting 1 second after the first failure on a given file, then waiting 2 seconds after the second failure on that file, up to
           the maximum number of seconds you specify.

           By default, Wget will assume a value of 10 seconds.

実装されてましたorz

$ wget -c --retry-connrefused [URL]

な感じで良さそう.
次の機会に試してみます.

speedtest.netがcliで利用できるspeedtest-cliを試す

九里 真夏 @orumin そういえば speedtest.net って Linux の CLI client もありますね。

ってことでLinuxのcliで動くPython製のspeedtest-cliをちょっと試してみた.

speedtest.netでの回線速度計測をcliで行えます.python製でpipとかで各種環境に導入可能.

Debianだとjessie以降all, Ubuntuだと16.04LTS以降allにpkgもあるのでapt一発で入るし,Raspberry PiなどのARMアーキテクチャなんかでも問題なく動きました.

規定値の動作はipからロケーション拾ってそこから近いサーバーで計測した結果を返すようです.
自宅のipアドレスでの自動判定では静岡になってたので手動で計測サーバを変更して鹿児島と東京を試しました.

help

$ speedtest-cli -h
usage: speedtest-cli [-h] [--bytes] [--share] [--simple] [--list]
[--server SERVER] [--mini MINI] [--source SOURCE]
[--timeout TIMEOUT] [--secure] [--version]

Command line interface for testing internet bandwidth using speedtest.net.
--------------------------------------------------------------------------
https://github.com/sivel/speedtest-cli

optional arguments:
-h, --help show this help message and exit
--bytes Display values in bytes instead of bits. Does not affect
the image generated by --share
--share Generate and provide a URL to the speedtest.net share
results image
--simple Suppress verbose output, only show basic information
--list Display a list of speedtest.net servers sorted by
distance
--server SERVER Specify a server ID to test against
--mini MINI URL of the Speedtest Mini server
--source SOURCE Source IP address to bind to
--timeout TIMEOUT HTTP timeout in seconds. Default 10
--secure Use HTTPS instead of HTTP when communicating with
speedtest.net operated servers
--version Show the version number and exit

規定値では自宅は静岡になっていて静岡サーバで計測する(実際は鹿児島)

$ speedtest-cli
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from FreeBit (180.131.110.140)...
Selecting best server based on latency...
Hosted by ClickL Network (Shizuoka) [0.02 km]: 110.464 ms
Testing download speed........................................
Download: 2.07 Mbit/s
Testing upload speed..................................................
Upload: 0.92 Mbit/s

日本のサーバを確認する

$ speedtest-cli --list|grep -i japan
14180) ClickL Network (Shizuoka, Japan) [0.02 km]
8407) Allied Telesis Capital Corporation (Sagamihara, Japan) [111.58 km]
6087) Allied Telesis Capital Corporation (Fussa-shi, Japan) [120.41 km]
6508) at2wn (Yokohama, Japan) [125.30 km]
7510) ASEINet (Tokyo, Japan) [141.71 km]
12546) TB (Tokyo, Japan) [141.71 km]
12511) h3zjp (Nerima, Japan) [142.66 km]
8348) Foxcore-LS (Sodegaura, Japan) [167.71 km]
7139) SoftEther Corporation (Tsukuba, Japan) [192.41 km]
6368) gatolabo (Maibara, Japan) [194.62 km]
6766) JAIST(ino-lab) (Nomi, Japan) [232.28 km]
13641) NextechNetworkSolutions (Nara, Japan) [237.53 km]
6476) rxy (individual) (Osaka, Japan) [264.80 km]
8832) prize3046 (Ikeda, Japan) [269.86 km]
8193) kamiari (Sendai, Japan) [427.67 km]
7976) denpa893 (Hikari, Japan) [601.03 km]
6405) Allied Telesis Capital Corporation (Misawa, Japan) [686.38 km]
13568) KSL (Kagoshima, Japan) [820.38 km]
811) GLBB Japan KK (Chatan, Japan) [1397.84 km]
6581) haza (Haebaru, Japan) [1410.56 km]

鹿児島サーバで計測してみる

$ speedtest-cli --server 13568
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from FreeBit (180.131.110.140)...
Hosted by KSL (Kagoshima) [820.38 km]: 103.499 ms
Testing download speed........................................
Download: 2.20 Mbit/s
Testing upload speed..................................................
Upload: 0.92 Mbit/s

東京を–simple optionで計測してみる

$ speedtest-cli --simple --server 7510
Ping: 150.627 ms
Download: 1.88 Mbit/s
Upload: 0.84 Mbit/s

サーバの数を確認してみる

$ speedtest-cli --list | wc -l
6509

speedtestはJavaScriptやAdobe Flashが必要なことが多くてヘッドレス環境などでは面倒でした.
iperfやnetcatなんかはお手軽ですが,速度テスト先のサーバの用意が必要です.

今回のspeedtest-cliはお手軽に導入できて世界各地のサーバ相手にcliでspeed testも出来ていい感じです.

Raspbian stretch 2017-09-07

DebianベースのRaspberry Pi向けのOSイメージの最新版Raspbian stretch 2017-09-07が出ている

http://downloads.raspberrypi.org/raspbian/release_notes.txt

2017-09-07:
* Disable predictable network interface names for Ethernet devices
* Bug fix for keyboard settings dialog in Raspberry Pi Configuration
* Bug fix for crash on some videos and animations in Chromium
* Bug fix for taskbar crash when running RealVNC server
* Bug fix for reloading projects with extensions in Scratch 2
* Bug fix for MAC address problem in Bluetooth
* Simple mode and new icons in Thonny
* New Japanese translations in Raspberry Pi Configuration
* Install fonts-droid-fallback for international fonts

先月の 2017-08-16 からDebian stretchベースになっています.今回は主にバグフィクスな感じ?

New Japanese translations in Raspberry Pi Configuration

は恐らくあっきーのrc_guiの翻訳かな?

Disable predictable network interface names for Ethernet devices

はwlan0とかがstretchからの新しい命名規則になる?

Install fonts-droid-fallback for international fonts

は自分は消して日本語フォント入れるかな?

とりあえずダウンロードが終わったら試してみます.

AsciiDocFXをARM64環境とかで試す

最近軽めのライブプレビューが出来てARM環境でも動くAsciiDoc環境がないかなーと探しています.今回はAsciiDocFX.

Java製のマルチプラットホームエディタ.ライブプレビュー機能もあり.

Asciidoc FX is a book / document editor to build PDF, Epub, Mobi and HTML books, documents and slides. AsciidocFX is also a winner of https://www.oracle.com/corporate/pressrelease/dukes-award-102815.html[Duke’s Choice Award 2015].

導入

アーカイブをダウンロードして展開するだけ.アーカイブはOS別にJRE同梱版とJREなし版がある.
Linux版JRE同梱版は中を見るとamd64だった.他のarchtectureではNo_JREを選ぶしかなさそう.

導入例
$ wget https://github.com/asciidocfx/AsciidocFX/releases/download/v1.5.5/AsciidocFX_Linux_No_JRE.tar.gz
$ tar xvf AsciidocFX_Linux_No_JRE.tar.gz
$ AsciidocFX/bin/AsciidocFX

OpenJDKで動かす場合は openjfx pkgも必要.

$ sudo apt install openjdk-8-jre openjfx

ARM64 + OracleJava環境では動作させることができていない.

警告

動作はしたが, overlay-scrollbar が見つからないという警告メッセージが出る.

$ ./AsciidocFX
Gtk-Message: Failed to load module "overlay-scrollbar"

overlay-scrollbar-gtk2 pkgを導入することで解決.

$ sudo apt install overlay-scrollbar-gtk2

使い勝手

  • ライブプレビューがあるのはやはり便利

    • よくずれるけども……

  • 動作はCore2Duoマシンでも起動には時間がかかるが起動すれば問題なく利用できる

    • ARM64(1.2GHz 64-Bit Quad-Core ARM Cortex A54)+OpenJDK環境ではキー入力からのタイムラグが気になって辛い

  • 書き出しフォーマットがHTML, PDF, Ebook(mobi/Epub), Docbookと豊富

    • しかしGUIでしか利用できないようでMarpと同じようなもどかしさがある

  • 基本的に3ペインで,左端はファイラー,アウトライン,最近使ったファイルが利用できるが閉じることも出来る(左端のアクティブなタブをクリック)

  • 右端ペインはプレビュー,設定が可能でこれも閉じること出来る(右端のアクティブなタブをクリック)

  • マウスの中ボタンや,shift+Insでの貼付けができない

  • 通常のコピー,ペーストもできなくなることがある

  • 利用中にフォントが滲むような表示になる

    • エディタ画面やプレビュー画面は更新で直るが他の部分は起動し直さないと直らない

てことでマウス中ボタン貼り付けや手持ちのARMで重いってことで選外に.

OpenJDK環境でAsciidocFXを動かす

AsciidocFXのLinux版はJRE同梱版(amd64のみ)とJREなし版が配布されています.
OpenJDKで動かないなと思っていたのですが,調べてみると以下のようなissueが.

てことでOpenJFXの導入を試してみたらamd64でもarm64環境でも起動しました :)
しかし手元のarm64環境ではキー入力してから表示されるまでのラグが結構気になるので実用にはちょっと辛そうでした.

$ sudo apt install openjfx
$ java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-0ubuntu1.16.04.2-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)