8月 03

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で重いってことで選外に.

8月 01

パスワードジェネレーターコマンド apg のオプションメモ

新しいマシンの設定するときに調べ直したメモ.

よく使うオプション

  • -a パスワードアルゴリズムの指定

    • 0 発音可能

    • 1 ランダム

  • -n パスワード生成数

  • -m パスワード最低文字長

  • -x パスワード最大文字長

  • -M 文字の種類を指定

    • S 必ず記号を利用

    • s 記号を利用

    • N 必ず数字を利用

    • n 数字を利用

    • C 必ず英大文字を利用

    • c 英大文字を利用

    • L 必ず英小文字を利用

    • l 英小文字を利用

  • -E 指定した文字を利用しない(複数指定可能)

記号のみ

$ apg -Ms -a1
#/^>,\../
\^./\{~<
%(_/_%_]]`
=..,;[$('
"$$$"<!]~
-%\?`_++<<
$ apg -MS -a1
,/.>[@;%@`
@,$(_/*_.
``'"}=*%#
[#|,'@?"-
,?];"]]&?@
[)'$@>'{/}

数字のみ

$ apg -Mn -a1
14683511
97138910
5192942105
3010244799
381484337
493808346
$ apg -MN -a1
5426157541
03163967
98161665
369810970
38523677
249810992

英大文字のみ

$ apg -Mc -a1
GBUDJODXIH
RMEUJNHKQM
OJHCTVJR
HPWKCOLD
ZAPCGYWCNA
WIOKVXDTZW
$ apg -MC -a1
KOQOVOSAJB
IWWQSBTL
IPUFNTGP
GMKFKXIJKT
OWVNYNFL
QLVOAUEMSU

英子文字のみ

$ apg -Ml -a1
uviqxdrc
tukfvlona
mzmwjjhe
jtssfdla
qmzjxlet
rzzxjvnyr
$ apg -ML -a1
wivxbkdpe
xnvdepbhro
wclwdrofjk
dorabarzdc
zedblcjp
ibwmgwwrv

記号数字英大文字小文字を必ず含む

$ apg -MSNCL
8dromKaix"
in2OfKain;
{on1Woan
Peow9Ot_
|owpIpVap9
7OnryubAp`

パスワード長最低11文字

$ apg -MSNCL -m11
DiOfnu1Miv>
@okshEcWew0
cosh1olbIm^
forkow0Oll^
'Obpiugtut1
ItEdd`dros0

パスワード文字長11〜16文字

apg -MSNCL -m11 -x16
bywax|biggIp3
yik7henvecJavUj"
8lawhasBokPyft^
yijTysFeg5oj%
8quactArnyobpec?
abGaj9etsyic)

覚え方も併記

$ apg -MSNCL -m11 -l
rawd9<FriWa romeo-alfa-whiskey-delta-NINE-LESS_THAN-Foxtrot-romeo-india-Whiskey-alfa
`shnoandOg1 GRAVE-sierra-hotel-november-oscar-alfa-november-delta-Oscar-golf-ONE
Rudwem9Gon! Romeo-uniform-delta-whiskey-echo-mike-NINE-Golf-oscar-november-EXCLAMATION_POINT
8OjsewJerj, EIGHT-Oscar-juliett-sierra-echo-whiskey-Juliett-echo-romeo-juliett-COMMA
mayng1WiUb^ mike-alfa-yankee-november-golf-ONE-Whiskey-india-Uniform-bravo-CIRCUMFLEX
Dams9Odcan- Delta-alfa-mike-sierra-NINE-Oscar-delta-charlie-alfa-november-HYPHEN

パスワードの生成数を20に

$ apg -MSNCL -m11 -l -n20
3OcMu7twad` THREE-Oscar-charlie-Mike-uniform-SEVEN-tango-whiskey-alfa-delta-GRAVE
Fed8Twygub; Foxtrot-echo-delta-EIGHT-Tango-whiskey-yankee-golf-uniform-bravo-SEMICOLON
Re^SwibTim9 Romeo-echo-CIRCUMFLEX-Sierra-whiskey-india-bravo-Tango-india-mike-NINE
~trirv2Dosh TILDE-tango-romeo-india-romeo-victor-TWO-Delta-oscar-sierra-hotel
Rot%slocOv1 Romeo-oscar-tango-PERCENT_SIGN-sierra-lima-oscar-charlie-Oscar-victor-ONE
5Knu.BijKue FIVE-Kilo-november-uniform-PERIOD-Bravo-india-juliett-Kilo-uniform-echo
!olf6Fobviv EXCLAMATION_POINT-oscar-lima-foxtrot-SIX-Foxtrot-oscar-bravo-victor-india-victor
_HemJefGej4 UNDERSCORE-Hotel-echo-mike-Juliett-echo-foxtrot-Golf-echo-juliett-FOUR
8drydOdlec| EIGHT-delta-romeo-yankee-delta-Oscar-delta-lima-echo-charlie-VERTICAL_BAR
mud2FridOn= mike-uniform-delta-TWO-Foxtrot-romeo-india-delta-Oscar-november-EQUAL_SIGN
ic:GrubFek6 india-charlie-COLON-Golf-romeo-uniform-bravo-Foxtrot-echo-kilo-SIX
playb(Blos4 papa-lima-alfa-yankee-bravo-LEFT_PARENTHESIS-Bravo-lima-oscar-sierra-FOUR
KajCedd<od8 Kilo-alfa-juliett-Charlie-echo-delta-delta-LESS_THAN-oscar-delta-EIGHT
Num>ObAind4 November-uniform-mike-GREATER_THAN-Oscar-bravo-Alfa-india-november-delta-FOUR
0Quoorc=gro ZERO-Quebec-uniform-oscar-oscar-romeo-charlie-EQUAL_SIGN-golf-romeo-oscar
Ocweecs_El4 Oscar-charlie-whiskey-echo-echo-charlie-sierra-UNDERSCORE-Echo-lima-FOUR
Jirk,Kneip7 Juliett-india-romeo-kilo-COMMA-Kilo-november-echo-india-papa-SEVEN
Marb?Bluch1 Mike-alfa-romeo-bravo-QUESTION_MARK-Bravo-lima-uniform-charlie-hotel-ONE
gabGon:Jep9 golf-alfa-bravo-Golf-oscar-november-COLON-Juliett-echo-papa-NINE
#utvabVert2 CROSSHATCH-uniform-tango-victor-alfa-bravo-Victor-echo-romeo-tango-TWO

指定した文字を含めない

$ apg -MSNCL -m11 -E1l!
Mobad3ubUj,
Ji3vin@Oraj
rap&OnIarb4
banip4UvAd(
Deugh[ixEn8
mojAw{osev5

aliasに設定

aliasに設定しておくと便利.

以下はbashに設定した例
$ echo 'alias apg="apg -MSNCL -m11"' | tee -a ~/.bashrc
alias apg="apg -MSNCL -m11"
設定反映(もしくはログインし直し)
$ source ~/.bashrc
$ alias | grep apg
alias apg='apg -MSNCL -m11'
動作確認
$ apg
EcsAr)Gruk9
Toym7Blyft%
phiet'ijEg4
wimDu[Neeb4
niUds/Odav2
notCeit!oc6
オプションを追加することも出来る
$ apg -l
6Drowm`twup SIX-Delta-romeo-oscar-whiskey-mike-GRAVE-tango-whiskey-uniform-papa
twar1mu^Mel tango-whiskey-alfa-romeo-ONE-mike-uniform-CIRCUMFLEX-Mike-echo-lima
Upumwik?Oc4 Uniform-papa-uniform-mike-whiskey-india-kilo-QUESTION_MARK-Oscar-charlie-FOUR
cyx4Odcaff) charlie-yankee-x_ray-FOUR-Oscar-delta-charlie-alfa-foxtrot-foxtrot-RIGHT_PARENTHESIS
6drebIt/quo SIX-delta-romeo-echo-bravo-India-tango-SLASH-quebec-uniform-oscar
5Ofdiatilg' FIVE-Oscar-foxtrot-delta-india-alfa-tango-india-lima-golf-APOSTROPHE
一時的にaliasを無効に
$ \apg
stintun0Oc? (stint-un-ZERO-Oc-QUESTION_MARK)
FlewUcyibr&Op0 (Flew-Uc-yibr-AMPERSAND-Op-ZERO)
Ont3okDeadGeg~ (Ont-THREE-ok-Dead-Geg-TILDE)
reginkAl#twew5 (reg-ink-Al-CROSSHATCH-twew-FIVE)
"4KnapavAvTil (QUOTATION_MARK-FOUR-Knap-av-Av-Til)
Frol9Swec\ (Frol-NINE-Swec-BACKSLASH)

環境

$ apg -v
APG (Automated Password Generator)
version 2.2.3 (PRNG: X9.17/SHA-1)
Copyright (c) 1999, 2000, 2001, 2002, 2003 Adel I. Mirzazhanov
$ apt show apg
Package: apg
Version: 2.2.3.dfsg.1-4
Priority: optional
Section: admin
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Marc Haber <mh+debian-packages@zugschlus.de>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 137 kB
Depends: libc6 (>= 2.14)
Homepage: http://www.adel.nursat.kz/apg/
Task: ubuntu-desktop, ubuntu-usb, edubuntu-desktop, edubuntu-usb, ubuntu-gnome-desktop, ubuntu-touch, ubuntukylin-desktop, ubun
tu-budgie-desktop
Supported: 9m
Download-Size: 50.2 kB
APT-Manual-Installed: no
APT-Sources: http://jp.archive.ubuntu.com/ubuntu artful/main amd64 Packages
Description: 自動パスワード生成器 - スタンドアロン版
 APG (Automated Password Generator) is the tool set for random password generation. It generates some random words of required
type and prints them to standard output. This binary package contains only the standalone version of apg. Advantages:
  * Built-in ANSI X9.17 RNG (Random Number Generator)(CAST/SHA1)
  * Built-in password quality checking system (now it has support for Bloom
    filter for faster access)
  * Two Password Generation Algorithms:
     1. Pronounceable Password Generation Algorithm (according to NIST
        FIPS 181)
     2. Random Character Password Generation Algorithm with 35
        configurable modes of operation
  * Configurable password length parameters
  * Configurable amount of generated passwords
  * Ability to initialize RNG with user string
  * Support for /dev/random
  * Ability to crypt() generated passwords and print them as additional output.
  * Special parameters to use APG in script
  * Ability to log password generation requests for network version
  * Ability to control APG service access using tcpd
  * Ability to use password generation service from any type of box (Mac,
    WinXX, etc.) that connected to network
  * Ability to enforce remote users to use only allowed type of password
    generation
  The client/server version of apg has been deliberately omitted.
 .
 Please note that there are security flaws in pronounceable password
 generation schemes (see Ganesan / Davis "A New Attack on Random
 Pronounceable Password Generators", in "Proceedings of the 17th National
 Computer Security Conference (NCSC), Oct. 11-14, 1994 (Volume 1)",
 http://csrc.nist.gov/publications/history/nissc/ 1994-17th-NCSC-
 proceedings-vol-1.pdf, pages 203-216)
 .
 apg has not seen upstream attention since 2003, upstream is not answering
 e-mail, and the upstream web page does not look like it is in good working
 order. The Debian maintainer plans to discontinue apg maintenance as soon
 as an actually maintained software with a compariable feature set becomes
 available.

$ neofetch
            .-/+oossssoo+/-.              mk@x200
        `:+ssssssssssssssssss+:`          -------
      -+ssssssssssssssssssyyssss+-        Model: 74574PJ ThinkPad X200
    .ossssssssssssssssssdMMMNysssso.      OS: Ubuntu Artful Aardvark (development branch) x86_64
   /ssssssssssshdmmNNmmyNMMMMhssssss/     Kernel: 4.11.0-10-generic
  +ssssssssshmydMMMMMMMNddddyssssssss+    Uptime: 2 days, 18 hours, 10 minutes
 /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/   Packages: 4274
.ssssssssdMMMNhsssssssssshNMMMdssssssss.  Shell: bash 4.4.12
+sssshhhyNMMNyssssssssssssyNMMMysssssss+  Resolution: 1280x800
ossyNMMMNyMMhsssssssssssssshmmmhssssssso  WM: awesome
ossyNMMMNyMMhsssssssssssssshmmmhssssssso  Theme: Ambiance [GTK3]
+sssshhhyNMMNyssssssssssssyNMMMysssssss+  Icons: Ubuntu-mono-dark [GTK3]
.ssssssssdMMMNhsssssssssshNMMMdssssssss.  Terminal: tilix
 /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/   CPU: Intel 2 Duo P8400 (2) @ 2.267GHz
  +sssssssssdmydMMMMMMMMddddyssssssss+    GPU: Intel® GM45 Express Chipset
   /ssssssssssshdmNNNNmyNMMMMhssssss/     GPU: Intel® GM45 Express Chipset
    .ossssssssssssssssssdMMMNysssso.      Memory: 7083MiB / 7878MiB
      -+sssssssssssssssssyyyssss+-
        `:+ssssssssssssssssss+:`
            .-/+oossssoo+/-.

4月 02

ext4の暗号化fsを試してみる

Linux 4.1でext4の暗号化ファイルシステムが取り込まれているのに気づいたので少し試してみました.
cCryptFSやEncFSなどと同じようにファイル単位での暗号化です.前もって暗号化フラグを設定してあれば一般ユーザが勝手に暗号領域を作ることも可能でした.eCryptFSやEncFSのような使い方も可能そうです.恐らく速度はこちらのほうが速いでしょう(未確認).ただ,パスフレーズがわかってしまうと別のユーザからもマウント可能だしパーミッションがあれば読み書きも出来るので通常のファイルシステムと同様パーミッションの設定は必須ですね.
パーティション内全てを暗号化することは出来ないようなのでLUKS(dm-crypt)とは単純に空きかえることはできなさそうです.

そんなこんなでもともとAndroid向けということもあってPC/Serverではあまり使いみちが思いつかない感じです.(何かいい使い方ありそうだけど…….)

必要条件確認

  • Linux 4.1以上
$ uname -r
4.9.0-2-amd64
  • CONFIG_EXT4_ENCRYPTIONが有効
$ grep CONFIG_EXT4_ENCRYPTION /boot/config-`uname -r`
CONFIG_EXT4_ENCRYPTION=y
  • e2fsprogs 1.43以上
$ dpkg-query -W e2fsprogs
e2fsprogs       1.43.4-2
  • ブロックサイズが4k
$ sudo dumpe2fs /dev/loop0 | grep -i 'block size'
dumpe2fs 1.43.4 (31-Jan-2017)
Block size:               4096

必要なパッケージの導入

$ sudo apt install e2fsprogs keyutils util-linux coreutils mount

ファイルシステムの用意

今回は既存のファイルシステム内にディスクイメージを作成してそれを利用

  • 1GBのディスクイメージの作成
$ dd if=/dev/zero of=ext4-crypt.img seek=1073741824 bs=1 count=1
1+0 レコード入力
1+0 レコード出力
1 byte copied, 0.000118528 s, 8.4 kB/s
  • パーティションの作成
    primaryを1つ作成
$ /sbin/fdisk ext4-crypt.img

Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xa25a3988.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-2097151, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-2097151, default 2097151): 

Created a new partition 1 of type 'Linux' and of size 1023 MiB.

Command (m for help): w
The partition table has been altered.
Syncing disks.
  • ext4でフォーマット
$ /sbin/mkfs.ext4 ./ext4-crypt.img 
mke2fs 1.43.4 (31-Jan-2017)
Found a dos partition table in ./ext4-crypt.img
Proceed anyway? (y,N) y
Discarding device blocks: done                            
Creating filesystem with 262144 4k blocks and 65536 inodes
Filesystem UUID: dc44fd43-7d7a-4dfc-87f1-dc52410e2dd1
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
  • マウント
$ sudo mount -o loop ./ext4-crypt.img /mnt
$ grep /mnt /etc/mtab 
/dev/loop0 /mnt ext4 rw,relatime,data=ordered 0 0
  • オーナー,グループの変更
$ sudo chown `id -u`.`id -g` /mnt
$ ls -la /mnt
合計 36
drwxr-xr-x 3 mk   mk    4096  4月  2 04:58 .
drwxr-xr-x 1 root root   248  3月 28 02:19 ..
drwx------ 2 root root 16384  4月  2 04:58 lost+found

ext4暗号化ファイルシステムの利用

  • ext4の暗号化フラグを設定
$ sudo tune2fs -O encrypt /dev/loop0
$ sudo dumpe2fs /dev/loop0 | grep -io encrypt
dumpe2fs 1.43.4 (31-Jan-2017)
encrypt
  • 鍵の生成とキーリングへの追加
$ /usr/sbin/e4crypt add_key
Enter passphrase (echo disabled): 
Added key with descriptor [07a3ce5a6ebf0396]
$ keyctl show
Session Keyring
1048296028 --alswrv   1000  1000  keyring: _ses
 615559430 --alsw-v   1000  1000   \_ logon: ext4:07a3ce5a6ebf0396

※パスフレーズの入力は1回だけで確認されないので初回は特に注意.利用しはじめる前にキーリングをクリアして登録し直してパスフレーズが正しいか確認しておく.

  • 暗号化ポリシーの設定

このとき対象ディレクトリが空ではない場合エラーとなる( Error [Directory not empty] setting policy. )ので注意.

マウントポイントにはlost+foundが存在するので必ずサブディレクトリ以下である必要がある.

$ mkdir /mnt/encryption
$ /usr/sbin/e4crypt set_policy 07a3ce5a6ebf0396 /mnt/encryption
Key with descriptor [07a3ce5a6ebf0396] applied to /mnt/encryption.

※鍵の生成とキーリングへの追加と暗号化ポリシーの設定は次のようにすることで一度に設定可能

$ /usr/sbin/e4crypt add_key /mnt/encryption
  • 暗号化ファイルシステム領域にファイルを作成
$ echo 'hello' > /mnt/encryption/test.txt
$ ls -la /mnt/encryption
合計 12
drwxr-xr-x 2 mk mk 4096  4月  2 05:07 .
drwxr-xr-x 4 mk mk 4096  4月  2 05:06 ..
-rw-r--r-- 1 mk mk    6  4月  2 05:07 test.txt
  • キーリングのクリア
$ sudo keyctl clear @s
$ sudo keyctl show
Session Keyring
1048296028 --alswrv   1000  1000  keyring: _ses

キーリングをクリアしただけではアクセスできる

$ ls -lA /mnt/encryption
合計 12
-rw-r--r-- 1 mk mk    6  4月  2 05:07 test.txt
  • アンマウントとマウントし直し

キーリングをクリアした状態でアンマウントすると暗号化された状態に戻る

$ sudo umount /mnt
$ sudo mount -o loop ./ext4-crypt.img /mnt
$ ls -la /mnt/encryption
合計 12
drwxr-xr-x 2 mk mk 4096  4月  2 05:42 .
drwxr-xr-x 4 mk mk 4096  4月  2 05:06 ..
-rw-r--r-- 1 mk mk    6  4月  2 05:42 uzUlJZQfaxMx,7cC63,53A
$ cat /mnt/encryption/uzUlJZQfaxMx,7cC63,53A 
cat: /mnt/encryption/uzUlJZQfaxMx,7cC63,53A: 要求されたキーが利用できません

ユーザ,グループ,パーミッションなどは見える.内容にはアクセスできない.

  • 再度暗号化領域を利用出来るようにする

鍵の生成とキーリングへの追加と暗号化ポリシーの設定をし直すとアクセスできるようになる

$ /usr/sbin/e4crypt add_key /mnt/encryption
Enter passphrase (echo disabled): 
Added key with descriptor [07a3ce5a6ebf0396]
$ ls -la /mnt/encryption
合計 12
drwxr-xr-x 2 mk mk 4096  4月  2 05:42 .
drwxr-xr-x 4 mk mk 4096  4月  2 05:06 ..
-rw-r--r-- 1 mk mk    6  4月  2 05:42 test.txt

ファイル名長の確認

EncFSなどはファイル名のメタデータがファイル名内にあるので利用できるファイル名長が短くなってしまう.ext4ではどうか試す.

  • 通常のext4領域では256文字
$ touch /mnt/1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456
touch: '/mnt/1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456' に touch できません: ファイル名が長すぎます
$ touch /mnt/123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345
  • 暗号化領域も同様だった
$ touch /mnt/encryption/123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345
$ ls -lA /mnt/encryption/
合計 4
-rw-r--r-- 1 mk mk 0  4月  2 07:14 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345
-rw-r--r-- 1 mk mk 6  4月  2 05:42 test.txt
  • 非暗号化状態ではこんな状態
-rw-r--r-- 1 mk mk    0  4月  2 07:14 _OsoePJvc3qPQCPHbUMtjSynszcHig3BL
-rw-r--r-- 1 mk mk    6  4月  2 05:42 uzUlJZQfaxMx,7cC63,53A

復号状態のファイル名は別の場所に記録されているよう.

複数の暗号化領域を作ってみる

  • 新しい暗号化領域のためのディレクトリを作成
$ mkdir /mnt/encryption2
$ ls -la /mnt/encryption2
合計 8
drwxr-xr-x 2 mk mk 4096  4月  2 06:49 .
drwxr-xr-x 5 mk mk 4096  4月  2 06:49 ..
  • 暗号化設定
$ sudo e4crypt add_key /mnt/encryption2
Enter passphrase (echo disabled):
Key with descriptor [9640dd016062b432] already exists
Key with descriptor [9640dd016062b432] applied to /mnt/encryption2.
$ keyctl show
Session Keyring   
1048296028 --alswrv   1000  1000  keyring: _ses
  94779002 --alsw-v      0     0   \_ logon: ext4:69ca01e214957173
 219437542 --alsw-v      0     0   \_ logon: ext4:07a3ce5a6ebf0396
1025344233 --alsw-v      0     0   \_ logon: ext4:9640dd016062b432
$ touch /mnt/encryption2/hoge
  • 一回暗号化を解除してマウントし直す
$ keyctl clear @s
$ keyctl show
Session Keyring   
1048296028 --alswrv   1000  1000  keyring: _ses
$ sudo umount /mnt
$ sudo mount -o loop ./ext4-crypt.img /mnt
  • 片方だけ鍵を登録して暗号化領域を利用
$ sudo e4crypt add_key /mnt/encryption2
Enter passphrase (echo disabled):
Added key with descriptor [9640dd016062b432]
Key with descriptor [9640dd016062b432] applied to /mnt/encryption2.
$ ls -la /mnt/encryption*
/mnt/encryption:  
合計 12
drwxr-xr-x 2 mk mk 4096  4月  2 06:11 .
drwxr-xr-x 5 mk mk 4096  4月  2 06:49 ..
-rw-r--r-- 1 mk mk    0  4月  2 06:11 _OsoePJvc3qPQCPHbUMtjSynszcHig3BL
-rw-r--r-- 1 mk mk    6  4月  2 05:42 uzUlJZQfaxMx,7cC63,53A

/mnt/encryption2: 
合計 8
drwxr-xr-x 2 mk mk 4096  4月  2 06:51 .
drwxr-xr-x 5 mk mk 4096  4月  2 06:49 ..
-rw-r--r-- 1 mk mk    0  4月  2 06:51 hoge

暗号化領域に鍵が登録されてない状態でファイルを作ってみる

暗号化領域に鍵が登録されてない状態でファイルを作るとどうなるかを確認.

$ ls -lA /mnt/encryption
合計 4
-rw-r--r-- 1 mk mk 0  4月  2 07:14 _OsoePJvc3qPQCPHbUMtjSynszcHig3BL
-rw-r--r-- 1 mk mk 6  4月  2 05:42 uzUlJZQfaxMx,7cC63,53A
mk@x220:~ (1180)$ touch /mnt/encryption/test
touch: '/mnt/encryption/test' のタイムスタンプを設定中です: そのようなファイルやディレクトリはありません
mk@x220:~ (1181)$ ls -lA /mnt/encryption
合計 4
-rw-r--r-- 1 mk mk 0  4月  2 07:14 _OsoePJvc3qPQCPHbUMtjSynszcHig3BL
-rw-r--r-- 1 mk mk 6  4月  2 05:42 uzUlJZQfaxMx,7cC63,53A

エラーとなって作れない.

別のユーザで利用

  • 別のユーザで中が見えるか確認
$ id
uid=1001(gm) gid=1001(gm) groups=1001(gm),20(dialout),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),107(netdev)
$ ls -la /mnt/encryption
合計 12
drwxr-xr-x 2 mk mk 4096  4月  2 06:11 .
drwxr-xr-x 7 mk mk 4096  4月  2 07:48 ..
-rw-r--r-- 1 mk mk    0  4月  2 07:14 _OsoePJvc3qPQCPHbUMtjSynszcHig3BL
-rw-r--r-- 1 mk mk    6  4月  2 05:42 uzUlJZQfaxMx,7cC63,53A
$ ls -la /mnt/encryption
合計 12
drwxrwxrwx 2 mk mk 4096  4月  2 06:11 .
drwxr-xr-x 7 mk mk 4096  4月  2 07:48 ..
-rw-r--r-- 1 mk mk    0  4月  2 07:14 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345
-rw-r--r-- 1 mk mk    6  4月  2 05:42 test.txt
  • 権限があればファイル作成もできる
$ touch /mnt/encryption/other_user
$ ls -lA /mnt/encryption
合計 4
-rw-r--r-- 1 mk mk 0  4月  2 07:14 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345
-rw-r--r-- 1 gm gm 0  4月  2 07:55 other_user
-rw-r--r-- 1 mk mk 6  4月  2 05:42 test.txt
  • 暗号化解除は出来ないと思ったが,
$ /usr/sbin/e4crypt add_key /mnt/encryption
/mnt/encryption: Permission denied
  • パーミッションをゆるくしてやると出来てしまう.
$ ls -la /mnt/encryption
合計 12
drwxrwxrwx 2 mk mk 4096  4月  2 07:55 .
drwxr-xr-x 7 mk mk 4096  4月  2 07:48 ..
-rw-r--r-- 1 gm gm    0  4月  2 07:55 97NmIBETx,1q9US96etRsA
-rw-r--r-- 1 mk mk    0  4月  2 07:14 _OsoePJvc3qPQCPHbUMtjSynszcHig3BL
-rw-r--r-- 1 mk mk    6  4月  2 05:42 uzUlJZQfaxMx,7cC63,53A
$ /usr/sbin/e4crypt add_key /mnt/encryption
Enter passphrase (echo disabled): 
Added key with descriptor [07a3ce5a6ebf0396]
Error [Permission denied] setting policy.
The key descriptor [07a3ce5a6ebf0396] may not match the existing encryption context for directory [/mnt/encryption].
$ ls -lA /mnt/encryption
合計 4
-rw-r--r-- 1 mk mk 0  4月  2 07:14 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345
-rw-r--r-- 1 gm gm 0  4月  2 07:55 other_user
-rw-r--r-- 1 mk mk 6  4月  2 05:42 test.txt

1月 26

Mumble server設定メモ

鹿児島Linux勉強会 2017.01の遠隔で利用した設定メモです.

  • サーバのOSはDebian jessie amd64
  • 自動起動せず利用時に手動で起動する
  • fwも都度手動
  • サブチャンネルはなし
  • ssl証明書は既存のstartsslを利用

pkgの導入

$ sudo apt install mumble-server

自動起動を無効にする

$ sudo dpkg-reconfigure mumble-server

で設定画面に入り,

Mumble-server (murmurd) can start automatically when the server is booted.

Autostart mumble-server on server boot?

を選択する.
(/etc/default/mumble-serverMURMUR_DAEMON_START=0でも)

設定ファイルを編集

diff --git a/mumble-server.ini b/mumble-server.ini
index b445d4e..46f1dfd 100644
--- a/mumble-server.ini
+++ b/mumble-server.ini
@@ -12,7 +12,7 @@
 #        NOT regex = \w* BUT regex = \\w*

 # Path to database. If blank, will search for
-# murmur.sqlite in default locations or create it if not found.
+A
 database=/var/lib/mumble-server/mumble-server.sqlite

 # If you wish to use something other than SQLite, you'll need to set the name
@@ -86,7 +86,7 @@ pidfile=/var/run/mumble-server/mumble-server.pid
 # configure it here ehan ehrough D-Bus or Ice.
 #
 # Welcome message sent to clients when they connect.
-welcometext="<br />Welcome to this server running <b>Murmur</b>.<br />Enjoy your stay!<br />"
+welcometext="<br />Welcome to KagoLUG server running <b>Murmur</b>.<br />Enjoy your stay!<br />"

 # Port to bind TCP and UDP sockets to.
 port=64738
@@ -144,26 +144,28 @@ users=100
 # addresses.
 # Only uncomment the 'registerName' parameter if you wish to give your "Root" channel a custom name.
 #
-#registerName=Mumble Server
+registerName=KagoLUG Mumble Server
 #registerPassword=secret
 #registerUrl=http://mumble.sourceforge.net/
-#registerHostname=
+registerHostname=kagolug.org

 # If this option is enabled, the server will announce its presence via the 
 # bonjour service discovery protocol. To change the name announced by bonjour
 # adjust the registerName variable.
 # See http://developer.apple.com/networking/bonjour/index.html for more information
 # about bonjour.
-#bonjour=True
+bonjour=False

 # If you have a proper SSL certificate, you can provide the filenames here.
 # Otherwise, Murmur will create it's own certificate automatically.
-#sslCert=
-#sslKey=
+#sslCert=/etc/letsencrypt/live/kagolug.org/cert.pem
+sslCert=/etc/letsencrypt/live/kagolug.org/fullchain.pem
+sslKey=/etc/letsencrypt/live/kagolug.org/privkey.pem
+#sslCA=/etc/letsencrypt/live/kagolug.org/fullchain.pem

 # If Murmur is started as root, which user should it switch to?
 # This option is ignored if Murmur isn't started with root privileges.
-uname=mumble-server
+uname=root

 # If this options is enabled, only clients which have a certificate are allowed
 # to connect.

ssl証明書をクリア

$ sudo murmurd -wipessl
$ sudo killall murmurd

利用時

デーモンの起動とポート開放を行う

$ sudo service mumble-server start
$ sudo iptables -A INPUT -p udp -m udp --dport 64738 -j ACCEPT
$ sudo iptables -A INPUT -p tcp -m tcp --dport 64738 -j ACCEPT

利用者にはサーバとポートを伝える
- server : kagolug.org
- port : 64738

mumble://kagolug.org?title=KagoLUG%20Mumble%20Server&version=1.2.0

利用環境

  • PC : ThinkPad X200(Ubuntu 16.10 amd64)
  • マイク : elecom製の数百円のもの
  • スピーカー : Elecom LBT-SPTR01ECBK

はじめLBT-SPTR01ECBKでマイクとスピーカー両方の役割をと思っていたが,うまく音を拾えない&HSP/HFPでは音が悪く聞き取りづらかったので役割を分けた.
マイクはPC直付だったので音を拾いづらい&キー入力の音などを拾っていたはず.

利用完了時

デーモンの終了

$ sudo service mumble-server start

iptablesのmumbleルールを閉じる

$ sudo iptables -L --line-numbers | grep 64738
23   ACCEPT     udp  --  anywhere             anywhere             udp dpt:64738
24   ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:64738
$ sudo iptables -D INPUT 23
$ sudo iptables -D INPUT 24
$ sudo iptables -L --line-numbers | grep 64738

課題

ssl証明書ファイルを読み込むためにdaemonをrootで動かしているのをmumble-serverユーザに戻したい.

-uname=mumble-server
+uname=root
$ sudo ls -l /etc/letsencrypt/live/kagolug.org/fullchain.pem /etc/letsencrypt/live/kagolug.org/privkey.pem
lrwxrwxrwx 1 root ssl-cert 40 Dec 26 10:30 /etc/letsencrypt/live/kagolug.org/fullchain.pem -> ../../archive/kagolug.org/fullchain9.pem
lrwxrwxrwx 1 root ssl-cert 38 Dec 26 10:30 /etc/letsencrypt/live/kagolug.org/privkey.pem -> ../../archive/kagolug.org/privkey9.pem

ssl-certグループにmumble-serverを登録で行けそう?

マイク

会議向けの全方位のマイクが欲しい

1月 26

鹿児島Linux勉強会 2017.01に参加

今回は遠隔参加を試してみました.BigBluebuttonなどの会議システムは映像も双方向に送れていい感じなのですが,野良勉強会では回線が無かったり今使っているPCではリアルタイムエンコードが難しいという問題があります.そこで音声のみのMumbleを利用しました.

サーバはさくらのVPSに設定,会場ではBluetoothマイク兼スピーカーで……と思ったのですが,このマイクではうまく音を拾わない&ヘッドホンのプロファイルでは音質も悪いのでA2DPにしてスピーカーのみの利用として,マイクはPC直付にしました.
このマイクは一応前指向性ですが数百円の安物なので音質は悪かったと思います.
でも双方向でのやり取りが出来るのは良かったです.会議室利用の際は良さそうです.

今回は資料が事前に共有できていたので良かったですが,資料が事前に共有できない場合はやはりどうにか映像を共有する方法を考えないといけないでしょうね.
そうするとやはりBBBやYoutubeLive等が必要に…….(帯域をなるべく絞って映像のみRaspberry PiでYoutubeLive配信というのが現実的かな?)

私の発表した内容は以下の3本でした.

Raspberry PiのUSB OTGを試す // Speaker Deck

USBを保護するUSBGuard // Speaker Deck

ゲーミングプラットホームのLutris紹介 // Speaker Deck

データはこちら.
- matoken / 鹿児島Linux勉強会2017.01 / ソース / — Bitbucket

Raspberry PiのUSB OTGはさわりだけでちょっとあれでした.次回までにもうちょっと…….

次回は2月上旬の土日にと思っています.今年は月一ペース開催を目標にと思っています.
最近は開催場所どうしよう……となって日が過ぎていくパターンなのでとりあえず日程アナウンスはして会場見つからなかったらマクドナルドとかで開催という感じで考えています.

12月 11

コマンドスニペットを手軽に調べられるコマンドのborg

borgはOK borgというsiteのスニペットをコマンドライン上から検索したり編集できるコマンドのようです.borgはgo製でApache License Version 2.0のソフトウェアです.

導入

導入方法は如何から対応バイナリを入手して適当な場所に置き,実行権をつけるだけです.arm linuxとか*BSDとか結構いろいろそろっています.

今回はこんな感じで導入しました.

$ wget https://github.com/ok-borg/borg/releases/download/v0.0.1/borg_linux_amd64 -O ~/usr/local/bin/borg && chmod +x ~/usr/local/bin/borg

利用方法

基本的にコマンドの後ろに調べたいキーワードをつけるだけです.規定値では5つの例が表示されます. bashでloopどう書くんだっけ?

$ borg "bash loop"
(1) Bash Shell Do While Loop Infinite loop?
         [11] while [ `prog -some flags` = "Another instance of this program is running, please exit it first" ]
              -
              bay=$(prog -some flags)
              while [ $bay = "Another instance of this program is running, please exit it first" ]
              do
              echo "Awaiting Access to program"
              bay=$(prog -some flags)
              done
              .....
         [12] while true
              do
         ...  

(2) Bash foreach loop
         [21] xargs cat <filenames.txt
              -
              for fn in `cat filenames.txt`; do
                  echo "the next file is $fn"
                  cat $fn
              done
         [22] for fn in `cat filenames.txt`; do cat "$fn"; done
         [23] while read filename
              do
                  echo "Printing: $filename"
                  cat "$filename"
         ...

(3) Bash loop ping successful
         [31] ((count = 100))                            # Maximum number to try.
              while [[ $count -ne 0 ]] ; do
                  ping -c 1 8.8.8.8                      # Try once.
                  rc=$?
                  if [[ $rc -eq 0 ]] ; then
                      ((count = 1))                      # If okay, flag to exit loop.
                  fi
                  ((count = count - 1))                  # So we don't go forever.
              done
              if [[ $rc -eq 0 ]] ; then                  # Make final determination.
         ...

(4) Limit for bash loop
        [41] for(( i=1; i <= 1000; i++ )); do
                 name=$(date --date="$i day ago" +%Y%m%d%H%M%S)
                 mkdir -p "$name" &&
                 touch "$name/${name}_file" ||
                 break
             done

(5) Bash 'for' loop syntax?
         [51] for (($i=0...
              -
              for ((i=0;i<10;i++))
         [52] for i in `seq 0 9`
              do
                  echo "the i is $i"
              done
         [53] for i in {0..9}
                do
                  echo $i
                done
         ...

画像をタイルに結合って?

$ borg "image tile"
(1) ImageMagick crop huge image
         [11] $ time convert -crop 512x512 +repage huge.tif x/image_out_%d.tif
              real    0m5.623s
              user    0m2.060s
              sys     0m2.148s
              $ time vips dzsave huge.tif x --depth 1 --tile-size 512 --overlap 0 --suffix .tif
              real    0m1.643s
              user    0m1.668s
              sys     0m1.000s
         [12]  convert -monitor -limit area 2mb myLargeImg.tif myLargeImg.mpc
              -
               #!/bin/bash
         ...

(2) Set clipboard to image - pbcopy
        [21] cat image.png | impbcopy -
        [22] # Copy image to clipboard
             uuencode SomeFile.jpg - | pbcopy
             -
             # Paste from clipboard to image file
             pbpaste | uudecode -o AnotherFile.jpg


(3) Using Amazon MapReduce/Hadoop for Image Processing
         [31] and should be able to be done using Bash
         [32] #!/usr/bin/env bash
              # NLineInputFormat gives a single line: key is offset, value is Isotropic Url
              read offset isofile
              # Retrieve file from Isotropic server to local disk
              echo "reporter:status:Retrieving $isofile" >&2
              target=`echo $isofile | awk '{split($0,a,"/");print a[5] a[6]}'`
              filename=$target.tar.bz2
              #$HADOOP_INSTALL/bin/hadoop fs -get $isofile ./$filename
              curl  $isofile -o $filename
         ...

(4) Convert multipage PDF to a single image
        [41] convert in.pdf -append out%d.png
             -
             convert *.png output.pdf
             -
             convert foo?.png output.pdf
        [42] convert in.pdf +append out%d.png

(5) bash cgi won't return image
        [51] echo -ne "Content-type: image/png\n\n"
             -
             echo -e "Content-type: image/png\n"
             -
               -n     do not output the trailing newline

とかとか.

オプションはこんな感じとりあえず省略されないように-fをつけてページャに渡すと良さそう.

$ borg --help
Usage of borg:
-f  (= false)
    Print full results, ie. no more '...'
-h (= "borg.crufter.com")
    Server to connect to
-l  (= 5)
    Result list limit. Defaults to 5
-p  (= false)
    Private search. Your search won't leave a trace. Pinky promise. Don't use this all the time if you want to see the search result relevancy improved

検索だけでなくスニペットの追加や編集もできるようです.

サーバも選べるので自分用のメモを蓄積することもできますね. ちょっと惜しいのはサーバと通信して結果を表示するのでオフラインでは使えないというところ. オフラインで使いたい場合はローカルにサーバを立てるか別の方法を使うしかなさそうです.

12月 09

端末をWeb共有できるttyd

端末をWebブラウザで共有できるソフトウェエアです. 以前似たものでGoTTYを試してみましたが,ttydはGoTTYインスパイアらしいです. ttydはc製でMITライセンスです.

導入

今回はDebian stretch amd64(testing)に導入しました. README.mdではUbuntu 16.04での手順が書かれていますがそのまま使えました.

$ sudo apt install cmake g++ pkg-config git vim-common libwebsockets-dev libjson-c-dev libssl-dev
$ git clone https://github.com/tsl0922/ttyd.git
$ cd ttyd
$ mkdir build
$ cd build
$ cmake ..
$ make

動かしてみる

$ ./ttyd -p 8080 bash

としてウェブブラウザで http://localhost:8080/ に繋ぐと利用できます. tmuxのセッションを共有して複数のブラウザで1つの端末の操作とかdocker利用とかGoTTYと同じように利用できます.

$ ./ttyd -p 8080 tmux new -A -s ttyd
[2016/12/09 18:54:25:5954] NOTICE: Initial logging level 7
[2016/12/09 18:54:25:5954] NOTICE: Libwebsockets version: 2.0.3 unknown-build-hash
[2016/12/09 18:54:25:5954] NOTICE: IPV6 not compiled in
[2016/12/09 18:54:25:5954] NOTICE: libev support compiled in but disabled
[2016/12/09 18:54:25:5954] NOTICE: libuv support compiled in but disabled
[2016/12/09 18:54:25:5955] NOTICE:  Threads: 1 each 1024 fds
[2016/12/09 18:54:25:5955] NOTICE:  mem: platform fd map:  8192 bytes
[2016/12/09 18:54:25:5955] NOTICE:  Compiled with OpenSSL support
[2016/12/09 18:54:25:5955] NOTICE:  SSL disabled: no LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT
[2016/12/09 18:54:25:5955] NOTICE: Creating Vhost 'default' port 8080, 2 protocols
[2016/12/09 18:54:25:5955] NOTICE:  Listening on port 8080
[2016/12/09 18:54:25:5955] NOTICE:  mem: per-conn:          920 bytes + protocol rx buf
[2016/12/09 18:54:25:5956] NOTICE:  canonical_hostname = x220
[2016/12/09 18:54:25:5956] NOTICE: TTY configuration:
[2016/12/09 18:54:25:5956] NOTICE:   start command: tmux new -A -s ttyd
[2016/12/09 18:54:25:5956] NOTICE:   reconnect timeout: 10s
[2016/12/09 18:54:25:5956] NOTICE:   close signal: SIGHUP (1)
[2016/12/09 18:54:25:6057] NOTICE: lws_protocol_init
[2016/12/09 18:54:25:9806] NOTICE: HTTP connect from localhost (127.0.0.1), path: /
[2016/12/09 18:54:25:0015] NOTICE: HTTP connect from localhost (127.0.0.1), path: /auth_token.js
[2016/12/09 18:54:26:3474] NOTICE: client connected from localhost (127.0.0.1), total: 1
[2016/12/09 18:54:26:3548] NOTICE: started process, pid: 30365
[2016/12/09 18:54:34:2928] NOTICE: HTTP connect from localhost (127.0.0.1), path: /
[2016/12/09 18:54:34:3132] NOTICE: error on reading from skt : 104
[2016/12/09 18:54:34:3132] NOTICE: sending SIGHUP to process 30365
[2016/12/09 18:54:34:3138] NOTICE: process exited with code 256, pid: 30365
[2016/12/09 18:54:34:3138] NOTICE: client disconnected from localhost (127.0.0.1), total: 0
[2016/12/09 18:54:34:5554] NOTICE: HTTP connect from localhost (127.0.0.1), path: /auth_token.js
[2016/12/09 18:54:34:5732] NOTICE: client connected from localhost (127.0.0.1), total: 1
[2016/12/09 18:54:34:5811] NOTICE: started process, pid: 30505
[2016/12/09 18:54:40:0073] NOTICE: wsi 0x556bcbc34500: TIMEDOUT WAITING on 3 (did hdr 0, ah 0x556bcbbc0c50, wl 0, pfd events 0)
[2016/12/09 18:54:40:0074] NOTICE: lws_header_table_detach: wsi 0x556bcbc34500: ah held 6s, ah.rxpos 0, ah.rxlen 0, mode/state 0 4,wsi->more_rx_waiting 0

20161209_18:12:56-1180

GoTTYについてはこちらを.


勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る from Kenichiro MATOHARA

12月 08

wgetライクにbittorrentを取得するtget

wgetコマンドのような使い勝手のBittorrentクライアントのtgetを試してみました. node製MITライセンスのアプリケーションです.

導入はnpmで.tgetではなくt-getなので注意.

$ npm install -g t-get

torrentファイル,マグネットリンクの他torrent URLでもダウンロードできるようです. 実行すると以下のようなプログレスが表示されてダウンロードが始まります.行幅はハードコードされているようです.

$ tget https://downloads.raspberrypi.org/raspbian_latest.torrent
 downloading 1 files (1.4GB) [============================= ] 97% 64.0s 588.8KB/s 99 peers

ダウンロード完了時は以下のような感じ.ダウンロード完了後直ちに終了します.

$ tget https://downloads.raspberrypi.org/raspbian_latest.torrent
------------------
2016-11-25-raspbian-jessie.zip 1.4GB
------------------
 downloaded 1 files (1.4GB)

ファイルの保存先はカレントディレクトリで,カレントディレクトリに書き込めない場合はエラーにならずファイルが消えてしまうようです.

便利だけどアップロード関係なく終了してしまうのでBittorrentへの貢献度は低そうです. ちなみに最近はリモートのTransmissionをfile serverで動作させて,Transmission-remote-gtkで操作しています.

12月 07

Screenfetch的な情報表示コマンドのNeofetch

Screenfetch的な情報表示コマンドのNeofetch

よくデスクトップのキャプチャを取得するときに表示されているScreenfetchコマンドというものがあります.システムの情報とアスキーアートを素敵に表示してくれます. これににたものでNetfetchというものを見かけたので試してみました.こちらは画像も扱えるようです.

導入

以下のページに各種環境への導入方法が書かれています.

Debian sid/stretchにはパッケージがあるようなことが書かれていますが,

Neofetch is in Debian Unstable/Stretch's official repositories.

今はsidのみのようです.

ということでひとまずstretchではこんな感じで導入しました.

$ #-- /etc/apt/sources.list.d/neofetch を作る
$ sudo apt edit-sources neofetch
$ cat /etc/apt/sources.list.d/neofetch.list
deb http://dl.bintray.com/dawidd6/neofetch jessie main
$ #-- 鍵のインポート
$ wget "https://bintray.com/user/downloadSubjectPublicKey?username=bintray" -O Release-neofetch.key
$ gpg Release-neofetch.key
pub   rsa4096 2015-02-17 [SC]
      8756C4F765C9AC3CB6B85D62379CE192D401AB61
uid           Bintray (by JFrog) <bintray@bintray.com>
sub   rsa4096 2015-02-17 [E]
$ sudo apt-key add Release-neofetch.key
$ rm Release-neofetch.key
$ #-- pkg情報更新&pkg導入
$ sudo apt update
$ sudo apt install neofetch

早速実行

$ neofetch --help

    NEOFETCH

    USAGE: neofetch --option "value" --option "value"

    NOTE: There's also a config option for each flag below.

    Info:
    --disable infoname          Allows you to disable an info line from appearing
                                in the output.
                                NOTE: You can supply multiple args. eg.
                                'neofetch --disable cpu gpu disk shell'
                                NOTE: The arguments must all be lowercase.
    --os_arch on/off            Hide/Show OS architecture.
    --speed_type type           Change the type of cpu speed to display.
                                Possible values: current, min, max, bios,
                                scaling_current, scaling_min, scaling_max
                                NOTE: This only support Linux with cpufreq.
    --cpu_shorthand type        Shorten the output of CPU
                                Possible values: name, speed, tiny, on, off
    --cpu_cores type            Whether or not to display the number of CPU cores
                                Takes: logical, physical, off
                                NOTE: 'physical' doesn't work on BSD.
    --cpu_speed on/off          Hide/Show cpu speed.
    --cpu_temp on/off           Hide/Show cpu temperature.
                                NOTE: This only works on Linux and BSD.
                                NOTE: For FreeBSD-based systems, you need to enable coretemp
                                      kernel module.
    --distro_shorthand on/off   Shorten the output of distro (tiny, on, off)
                                NOTE: This option won't work in Windows (Cygwin)
    --kernel_shorthand on/off   Shorten the output of kernel
                                NOTE: This option won't work in BSDs (except PacBSD and PC-BSD)
    --uptime_shorthand on/off   Shorten the output of uptime (tiny, on, off)
    --refresh_rate on/off       Whether to display the refresh rate of each monitor
                                Unsupported on Windows
    --gpu_brand on/off          Enable/Disable GPU brand in output. (AMD/NVIDIA/Intel)
    --gtk_shorthand on/off      Shorten output of gtk theme/icons
    --gtk2 on/off               Enable/Disable gtk2 theme/icons output
    --gtk3 on/off               Enable/Disable gtk3 theme/icons output
    --shell_path on/off         Enable/Disable showing $SHELL path
    --shell_version on/off      Enable/Disable showing $SHELL version
    --ip_host url               Url to query for public IP
    --song_shorthand on/off     Print the Artist/Title on seperate lines
    --birthday_shorthand on/off Shorten the output of birthday
    --birthday_time on/off      Enable/Disable showing the time in birthday output
    --birthday_format format    Format the birthday output. (Uses 'date' cmd format)

    Text Formatting:
    --colors x x x x x x        Changes the text colors in this order:
                                title, @, underline, subtitle, colon, info
    --underline on/off          Enable/Disable the underline.
    --underline_char char       Character to use when underlining title
    --bold on/off               Enable/Disable bold text

    Color Blocks:
    --color_blocks on/off       Enable/Disable the color blocks
    --block_width num           Width of color blocks in spaces
    --block_height num          Height of color blocks in lines
    --block_range start end     Range of colors to print as blocks

    Bars:
    --bar_char 'elapsed char' 'total char'
                                Characters to use when drawing bars.
    --bar_border on/off         Whether or not to surround the bar with '[]'
    --bar_length num            Length in spaces to make the bars.
    --bar_colors num num        Colors to make the bar.
                                Set in this order: elapsed, total
    --cpu_display mode          Bar mode.
                                Takes: bar, infobar, barinfo, off
    --memory_display mode       Bar mode.
                                Takes: bar, infobar, barinfo, off
    --battery_display mode      Bar mode.
                                Takes: bar, infobar, barinfo, off
    --disk_display mode         Bar mode.
                                Takes: bar, infobar, barinfo, off

    Image:
    --image type                Image source. Where and what image we display.
                                Possible values: wall, ascii,
                                /path/to/img, /path/to/dir/, off
    --size 00px | --size 00%    How to size the image.
                                Possible values: auto, 00px, 00%, none
    --crop_mode mode            Which crop mode to use
                                Takes the values: normal, fit, fill
    --crop_offset value         Change the crop offset for normal mode.
                                Possible values: northwest, north, northeast,
                                west, center, east, southwest, south, southeast

    --xoffset px                How close the image will be to the left edge of the
                                window. This only works with w3m.
    --yoffset px                How close the image will be to the top edge of the
                                window. This only works with w3m.
    --bg_color color            Background color to display behind transparent image.
                                This only works with w3m.
    --gap num                   Gap between image and text.
                                NOTE: --gap can take a negative value which will
                                move the text closer to the left side.
    --clean                     Delete cached files and thumbnails.

    Ascii:
    --ascii value               Where to get the ascii from, Possible values:
                                distro, /path/to/ascii
    --ascii_colors x x x x x x  Colors to print the ascii art
    --ascii_distro distro       Which Distro's ascii art to print
                                NOTE: Arch and Ubuntu have 'old' logo varients.
                                NOTE: Use 'arch_old' or 'ubuntu_old' to use the old logos.
                                NOTE: Ubuntu has flavor varients.
                                NOTE: Change this to 'Lubuntu', 'Xubuntu', 'Ubuntu-GNOME'
                                or 'Ubuntu-Budgie' to use the flavors.
    --ascii_logo_size           Size of ascii logo.
                                Supported distros: Arch, Gentoo, Crux, OpenBSD.
    --ascii_bold on/off         Whether or not to bold the ascii logo.
    --logo | -L                 Hide the info text and only show the ascii logo.

    Screenshot:
    --scrot | -s /path/to/img   Take a screenshot, if path is left empty the screen-
                                shot function will use $scrot_dir and $scrot_name.
    --upload | -su /pth/t/img   Same as --scrot but uploads the scrot to a website.
    --image_host                Website to upload scrots to. Takes: imgur, teknik
    --scrot_cmd cmd             Screenshot program to launch

    Other:
    --config /path/to/config    Specify a path to a custom config file
    --config none               Launch the script without a config file
    --help                      Print this text and exit
    --version                   Show neofetch version
    -v                          Display error messages.
    -vv                         Display a verbose log for error reporting.

オプション結構多いです. とりあえず素で実行.

20161207_05:12:12-5188

情報もScreenfetchより増えています.

20161207_05:12:20-9093

次は画像を指定してみます.画像サイズが大きかったので25%に縮小もしています. 楽しい :)

20161207_05:12:35-3963

20161207_06:12:30-16979

画像の表示については環境によってうまく行く行かないがあるようです.うまく表示されない場合は以下のWikiを参照すると良さそうです.

12月 06

コマンドラインで動作する絵文字検索ソフトウェアのemoj

PCで絵文字を入力するとき日本語入力システムがあればそれで入力できますが,英語圏では恐らく無理.てことでいくつかツールがあるのですが,コマンドラインで動作するemojを見つけたので試してみました.

導入はnpmか,

npm install emoj

snapで.

$ sudo snap install emoj

後はemojコマンドに引数を与えるか,emojコマンドを引数無しで実行してライブモードで利用します. 引数やライブモードで入力する文字列は表示したい絵文字に関連する単語を入力します.ライブモードはEnterでクリアされ,Ctrl + cでexitできます.表示された絵文字をコピー&ペーストして利用するようです.1つ目に出てくる絵文字をクリップボードにクリップする--copy/-cというオプションもあるようですが手元ではうまく動いていません.

$ emoj neko
🐱  👥  ↪  😻  ↔  🐈
$ emoj cat
🐱  🐈  😺  😻  😸  😼  😽
$ emoj

› sushi
🍣  🍱  🍙  🍤  😋  🍚  😍

asciicast

絵文字のフォントがない場合はNoto Fontsを利用するのが手っ取り早いと思います.

日本語入力システムを使う人やGUIを利用する人は日本語入力システムやemojione-pickerを使ったほうが便利かもしれません.