OsMo.mobiがDownしたのでPhoneTrackを使う

近頃はOsMoで検索すると,DJIのドローンやジンバルが出てくるようになっていますがOsMoはそういうものではなく,位置情報共有サービスです.スマートフォンにアプリを導入して共有URLで今自分の居る場所を共有できます.Glympseなどが類似サービスになると思います.

このOsMoですが,最近サーバがダウンして利用できなくなりました.(一応オフラインでローカルにログを取得することは可能)
OsMoのアプリ(OsMoDroid)を導入していると,telegramに誘導するメッセージが表示されるようになりました.

IMG 20190821 235148

20190824 20:08:03 4249

このチャンネルを覗くとサーバが(物理的に?)失われて,更にバックアップが05/15のものしか無いようで,そのデータで復旧を試みようとしているけど未だホスト先を探している状態のようです.
復旧までにはまだまだ掛かりそうなです.

Константин Гам, [22.08.19 02:57]
Что произошло? Сервер приложения OsMo и сайта повреждён, сгорел диск. Потеряны все данные пользователей. Из-за несработавшего бекапа, последняя полная копия проекта датируется 15 мая 2019 года.
Диск заменили, но требуется много работы по запуску проекта с нуля и дальнейшее накатывание копии от мая…​

Собираем на восстановление сервера осмо (часы + сервера + тонна кофе), 5200/60000 руб

VISA: 4083 9720 5573 2954
QIWI: +7 (921) 426-74-00

В комментарий указывайте email аккаунта, если есть или будущего. Всем кто донатит 1500+ рублей, максимальный PRO пожизненно.
Если комментарий недоступен, кидайте время и место платежа в почту osmo.mobi@gmail.com

OsMoが使えない間の代替サービスを探そうと思いましたが,そういえば以前PhoneTrackというアプリケーションを導入していたのを思い出しました.

PhoneTrackはNextcloudのアプリケーションとして導入して,位置情報アップロード用のURLを発行して各種アプリケーションで位置情報をアップロード,この情報を共有URLで共有することも出来ます.
対応アプリケーションも色々あります.私はOsmAnd+,Uloggerを利用しています.
以下はOsmAnd+での設定例です.

IMG 20190827 084323
IMG 20190827 084402

位置情報共有用のURLは長いのですが,QRcodeで読み取ることも出来ます :)

20190827 08:08:46 30083

長時間動かすことが多いので消費電力の少ない設定やアプリを探そうと思います.

API経由でpocketに投稿した記事を取得してみたけどRSSで十分だった

最近放置がちだったpocketを活用し始めました.Android端末で隙間時間にRSS消化して気になったものをpocketに投げておいて後でPCで読むという感じのブックマーク代わりな感じです.

ここに投稿したものを日毎に保存しておくと便利かもと試した記録です.

アプリケーション登録

まずはアプリケーション登録をする

記事が読めればいいので,permissionsは`Retrieve`
にした.登録すると,CONSUMER KEY が入手できる.

REQUEST TOKENを入手する

$ curl -H "Content-Type: application/json; charset=UTF-8" -X POST \
   https://getpocket.com/v3/oauth/request \
   -d '
{
  "consumer_key" : "XXXX-XXXXXXXXXXXXXXXXXXXXXXXX",
  "redirect_uri":"http://matoken.org/"
}
'

結果

code=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXX

アプリケーションをアカウントに紐付ける

ウェブブラウザで
`https://getpocket.com/auth/authorize?request_token=&redirect_uri=http://matoken.org/’
にアクセスしてアカウントにリクエストを許可する.urlは適当.

20190816 01 08 26 22616

アクセストークンを入手する

$ curl -H "Content-Type: application/json; charset=UTF-8" -X POST \
https://getpocket.com/v3/oauth/authorize \
-d '
{
  "consumer_key":"<CONSUMER_KEY>",
  "code":"<REQUEST_TOKEN>"
}
'

結果

access_token=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXX&username=user%40example.com

投稿を取得する

application/json で求める.とりあえず1件だけ(count'':1”)

$ curl -H "Content-Type: application/json; charset=UTF-8" -X POST \
https://getpocket.com/v3/get -d '
{
  "consumer_key":"<CONSIMMER_KEY>",
  "access_token":"<ACCESS_TOKEN>",
  "count":1
}
' | jq
{
  "status": 1,
  "complete": 1,
  "list": {
  "2692971736": {
    "item_id": "2692971736",
    "resolved_id": "2692971736",
    "given_url": "https://www.patreon.com/posts/29180933",
    "given_title": "DUVET | 1041uuu on Patreon",
    "favorite": "0",
    "status": "0",
    "time_added": "1565885008",
    "time_updated": "1565885011",
    "time_read": "0",
    "time_favorited": "0",
    "sort_id": 0,
    "resolved_title": "",
    "resolved_url": "https://www.patreon.com/posts/29180933",
    "excerpt": "",
    "is_article": "0",
    "is_index": "0",
    "has_video": "0",
    "has_image": "0",
    "word_count": "0",
    "lang": "",
    "domain_metadata": {
    "name": "Patreon",
    "logo": "https://logo.clearbit.com/patreon.com?size=800",
    "greyscale_logo": "https://logo.clearbit.com/patreon.com?size=800&greyscale=true"
    },
    "listen_duration_estimate": 0
  }
  },
  "error": null,
  "search_meta": {
  "search_type": "normal"
  },
  "since": 1565886741
}

application/x-www-form-urlencoded で求める.結果は同じでjson形式で帰ってくる.

$ curl -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -X POST https://getpocket.com/v3/get -d \
  "consumer_key=<CONSUMER_KEY>&access_token=<ACCES_TOKEN>&state=all&sort=oldest&detailType=symple&since=`date -d'1days ago' +%s`" | jq .

引数の意味はこんな感じ

  • state=all : 全ての投稿形式(既読未読の両方)

  • sort=oldest : 古いものから順に

  • detailType=simple : 基本的な情報

  • since=date -d'1days ago' +%s : 指定したUNIX
    Time以降の記事を取得.取得する開始UNIX TimeをGNU coreutilsのdate
    commandで過去1日(-d’1days ago’)時点のUNIX Time(+%s)を取得して指定

毎日前日分のpocket投稿titleとurlをDokuwikiに書き込み(Markdown形式)

$ sudo -u www-data crontab -l | grep wiki
0 0 1 * *       mkdir -p /var/lib/dokuwiki/farm/wiki.matoken.org/data/pages/memo/`date +\%Y/%m`
2 0 * * *       curl -s -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -X POST https://getpocket.com/v3/get -d "consumer_key=87275-eea7fa53556961262450492d&access_token=27847a46-0ff9-f9a3-ea7f-31279b&state=all&sort=oldest&detailType=symple&since=`date -d'1days ago' +%s`" | jq -r '.list[] | [.given_title,.given_url] | @csv' | sed -e 's/^"/* [/' | sed -e 's/","/](/' | sed -e 's/"$/)/' | sed -e 's/^\[]/\[null]/' | sed '1s/^/\n/' >> /var/lib/dokuwiki/farm/wiki.matoken.org/data/pages/memo/`date +\%Y/\%m/\%F`.txt

1行目

  • 0 0 1 * * : 毎月1日の00:00に実行

  • mkdir -p /var/lib/dokuwiki/farm/wiki.matoken.org/data/pages/memo/`date
    +%Y/%m`
    : 月のディレクトリを掘る.%がエスケープされているのはcrontabの使用に合わせて.

  • 1 0 * * * : 毎日 00:01 に実行

2行目

  • jq -r '.list[] | [.given_title,.given_url] | @csv' :
    pocketからの結果からtitleとurlを抜き出してcsv形式で出力

  • sed -e 's/^"/* [/' | sed -e 's/","/](/' | sed -e 's/"$/)/' | sed -e 's/^\[]/\[null]/'
    : markdownのリンクに変換

  • sed '1s/^/\n/' :
    先頭行を空けないとmarkdownを認識しないようなので改行を入れる

  • /var/lib/dokuwiki/farm/wiki.matoken.org/data/pages/memo/`date +\%Y/\%m/\%F`.txt`
    : 保存先,dokuwikiでは memo:2019:08:2019-08-16 のようになる

実はRSSで吐き出せる……

pocketのオプションのプライバシー管理の中にRSSフィードの項目が!

20190816 12 08 10 2311

これを公開にして「すべてのアイテムフィード」を取得すればやりたかったことが出来た…….

細かい制御をしたいならAPIのほうがいいと思いますが,今回自分がやりたかったのは毎日のバックアップだったので…….もう設定終わったからこれは見なかったことに.

$ rsstail -l -1 -n5 -H -u "http://getpocket.com/users/*sso1456706866592e34/feed/all"
Title: エロの秘密結社 ドシコルド EP.38 夢現のエモーション - 無料コミック ComicWalker
Link: https://comic-walker.com/viewer?tw=2&dlcl=ja&cid=KDCW_MF00000086010039_68&bs=1
Title: 次世代衛星向け「グリーン燃料」 月探査でも使用か 日米が開発競争
Link: https://sankei.com/life/news/190815/lif1908150010-n1.html
Title: ArchiveBox
Link: https://archivebox.io
Title: セキュリティ企業が管理する約2800万件の生体認証記録が流出していたことが判明
Link: https://gigazine.net/news/20190815-data-breach-biometric-security
Title: DUVET | 1041uuu on Patreon
Link: https://patreon.com/posts/29180933

環境

$ dpkg-query -W curl sed jq rsstail dokuwiki
curl    7.64.0-4
dokuwiki        0.0.20180422.a-2
jq      1.5+dfsg-2+b1
rsstail 1.8-1+b1
sed     4.7-1
$ lsb_release -dr
Description:    Debian GNU/Linux 10 (buster)
Release:        10
$ uname -m
x86_64

Nextcloud 15にアップデートして出現した「セキュリティ&セットアップ警告」を解消

php5のサーバでNextcloud 14系だったのですが,php 7.0 に出来るようになったのでNextcloud もアップグレードして15にしました.
するといくつかの「セキュリティ&セットアップ警告」が出てきたので対応したメモです.

MariaDBのデータベースの4バイト文字のサポート

20190814 01 08 48 4287

MySQLをデータベースとして使用していますが、4バイト文字をサポートしていません。たとえば、ファイル名やコメントの問題なしに(絵文字のような)4バイト文字を処理できるようにするには、MySQLで4バイトサポートを有効にすることをお勧めします。 詳細についてはこれに関するドキュメントページを読んでください。

ここでいうドキュメントページは以下のリンクでした.

現在のデータベースのバージョンを確認します.

$ mysql --version
mysql  Ver 15.1 Distrib 10.1.38-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

innodb_file_format を確認して,Barracuda でない場合は`Barracuda` に変更します.

$ mysql -udebian-sys-maint -p
MariaDB [(none)]> show variables like 'innodb_file_format';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| innodb_file_format | Antelope |
+--------------------+----------+
MariaDB [(none)]> show variables like 'innodb_file_format';
+--------------------+-----------+
| Variable_name      | Value     |
+--------------------+-----------+
| innodb_file_format | Barracuda |
+--------------------+-----------+
MariaDB [(none)]> quit;
Bye
$ sudo service mariadb restart

ここからはMySQL/MariaDBのソフトウェア,バージョン毎に少し設定が異なります.

MariaDBの設定ファイルの`[mysqld]` セクションに`innodb_file_per_table=1` を設定

innodb_file_per_table=1

MariaDBを再起動して設定反映.

$ sudo service mariadb restart

データベースの文字コードなどを変更

MariaDB [(none)]> ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

Nextcloud側の設定も4バイト文字を有効にする

$ sudo -u www-data php ./occ config:system:set mysql.utf8mb4 --type boolean --value="true"
System config value mysql.utf8mb4 set to boolean true

repairを掛けるとエラーに
20190814 01 08 35 31677

$ sudo -u www-data php ./occ maintenance:repair
Nextcloud is in maintenance mode - no apps have been loaded

 - Repair MySQL collation
	 - Change row format for oc_addressbooks ...
	 - Change collation for oc_addressbooks ...

In AbstractMySQLDriver.php line 115:

  An exception occurred while executing 'ALTER TABLE `oc_addressbooks` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;':

  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes


In PDOStatement.php line 107:

  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes


In PDOStatement.php line 105:

  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes


maintenance:repair [--include-expensive]

max key length is 767 bytes ということで以下の設定も追記して

[mysqld]
innodb_large_prefix=true
innodb_file_format=barracuda
innodb_file_per_table=1

MariaDBを再起動して設定反映.

$ sudo service mariadb restart

再度repairを掛けると正常に終了.

$ sudo -u www-data php ./occ maintenance:repair

メンテナンスモードを抜けてNextcloudを開き,エラーメッセージが消えているのを確認

$ sudo -u www-data php ./occ maintenance:mode --off
Maintenance mode disabled

PHP OPcacheの設定

20190814 01 08 05 2116

PHP OPcacheが適切に設定されていません。よりパフォーマンスを向上させるには、php.iniで次の設定を推奨します:
opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

/etc/php/7.0/apache2/php.ini を編集してapache httpd2の設定を再読込して反映.

$ sudo vi /etc/php/7.0/apache2/php.ini
$ sudo service apache2 reload

データベースにインデックスを作成

20190814 01 08 43 6355

データベースにいくつかのインデックスがありません。 大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。 “occ db:add-missing-indices”を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。 インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。
テーブル “oc_share”のインデックス “share_with_index”が見つかりません。
テーブル “oc_share”のインデックス “parent_index”が見つかりません。
テーブル “oc_share”のインデックス “owner_index”が見つかりません。
テーブル “oc_share”のインデックス “initiator_index”が見つかりません。
テーブル “oc_filecache”のインデックス “fs_mtime”が見つかりません。

occ db:add-missing-indices を実行して解決.

$ sudo -u www-data php ./occ db:add-missing-indices

imagickモジュールの導入

20190814 01 08 54 8885

このインスタンスには推奨されるPHPモジュールがいくつかありません。 パフォーマンスの向上と互換性の向上のために、それらをインストールすることを強くお勧めします。
imagick

php-imagick パッケージを導入してapache httpd2を再読込

$ sudo apt install php-imagick
$ sudo service apache2 reload

データベースのbig intへの変換

20190814 01 08 22 10566

データベース内のいくつかの列で、big intへの変換が行われていません。 大きなテーブルでカラムタイプを変更すると時間がかかることがあるため、自動的には変更されませんでした。 ‘occ db:convert-filecache-bigint’を実行することによって、それらの保留中の変更は手動で適用できます。 この操作は、インスタンスがオフラインの間に行う必要があります。 詳細についてはこれに関するドキュメントページを読んでください。
activity.activity_id
activity.object_id
activity_mq.mail_id
filecache.fileid
filecache.storage
filecache.parent
filecache.mimetype
filecache.mimepart
filecache.mtime
filecache.storage_mtime
mimetypes.id
storages.numeric_id

occ db:convert-filecache-bigint で反映

$ sudo -u www-data php ./occ db:convert-filecache-bigint
Following columns will be updated:

* activity.activity_id
* activity.object_id
* activity_mq.mail_id
* filecache.fileid
* filecache.storage
* filecache.parent
* filecache.mimetype
* filecache.mimepart
* filecache.mtime
* filecache.storage_mtime
* mimetypes.id
* storages.numeric_id

This can take up to hours, depending on the number of files in your instance!
Continue with the conversion (y/n)? [n] y

Nextcloud 16にも上げてみたいのですが,phpのバージョンを上げないといけないしE2EEプラグインが未対応だったりするのでとりあえず今回は見送りです.

20190814 17 08 22 16312

環境

$ sudo -u www-data php ./occ --version
Nextcloud 15.0.10
$ dpkg-query -W mariadb-common mariadb-server-10.1 php7.0 php7.0-mysql php-imagick
mariadb-common  10.1.38-0+deb9u1
mariadb-server-10.1     10.1.38-0+deb9u1
php-imagick     3.4.3~rc2-2
php7.0  7.0.33-0+deb9u3
php7.0-mysql    7.0.33-0+deb9u3
$ lsb_release -dr
Description:    Debian GNU/Linux 9.9 (stretch)
Release:        9.9
$ uname -m
x86_64

Debian 10 Buster testing をリリース後に apt update するとエラーになる

2019-07-06 に Debian Buster 10 がリリースされました.

Debian 10 Buster testing 環境でリリース後に apt update をするとエラーになってしまいます.

$ sudo apt update
Get:1 http://security.debian.org/debian-security buster/updates InRelease [39.1 kB]
Get:2 http://deb.debian.org/debian buster InRelease [118 kB]
N: Repository 'http://security.debian.org/debian-security buster/updates InRelease' changed its 'Version' value from '' to '10'
E: Repository 'http://security.debian.org/debian-security buster/updates InRelease' changed its 'Suite' value from 'testing' to 'stable'
N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details.
Do you want to accept these changes and continue updating from this repository? [y/N]
N: Repository 'http://deb.debian.org/debian buster InRelease' changed its 'Version' value from '' to '10.0'
E: Repository 'http://deb.debian.org/debian buster InRelease' changed its 'Suite' value from 'testing' to 'stable'
N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details.
Do you want to accept these changes and continue updating from this repository? [y/N]
Reading package lists... Done
E: Failed to fetch http://deb.debian.org/debian/dists/buster/InRelease
E: Failed to fetch http://security.debian.org/debian-security/dists/buster/updates/InRelease
E: Some index files failed to download. They have been ignored, or old ones used instead.

--allow-releaseinfo-change を指定してAPT にリリースを情報を確認したことを教えます.

$ sudo apt --allow-releaseinfo-change update

次からはオプション無しで実行してもエラーが出なくなります.

$ sudo apt update
Hit:1 http://deb.debian.org/debian buster InRelease
Hit:2 http://security.debian.org/debian-security buster/updates InRelease
Reading package lists... Done
Building dependency tree
Reading state information... Done
3 packages can be upgraded. Run 'apt list --upgradable' to see them.

ちなみに stable でなく testing 環境を使い続けたい場合は /etc/apt/sources.list を現在の Debian testing の bullseye に修正すればいいはず.

環境
$ dpkg-query -W apt
apt     1.8.2
$ hostnamectl | egrep 'Operating System|Architecture'
  Operating System: Debian GNU/Linux 10 (buster)
      Architecture: x86-64

apticron でDebian/Ubuntuのパッケージ更新情報を取得する

最近は Debian/Ubuntu等でのパッケージ更新確認のために crontab にこんな感じのものを登録していました.

apt update 2>&1 | tail -1 | grep -v 'All packages are up to date.' && apt list --upgradable ; apt-cache stats

これはパッケージ情報を更新して,アップデートがあったらパッケージ一覧を求めています.とりあえずこれで使えていたのですが,apticron というパッケージを見つけました.
これはほぼ同じ機能のようですが,パッケージリストだけでなく changelog も含まれます.

20190316 22 03 57 12604

パッケージを導入すればとりあえず使えるようになります.
設定ファイルは /usr/lib/apticron/apticron.conf に雛形が用意されているので /etc/apticron/apticron.conf にコピーして編集します.といっても宛先のメールアドレスが root になっているのでそれを変更するくらいで問題なく使えています.
簡単便利.

Debian では jessie から,Ubuntu では trusty からパッケージがあるようです.

2019-03-17 add)
Google+(もうすぐ終了……) でjessie以前からあったようなというコメントをいただきました.changelogを見ると2002年からあったようです.packages.debian.org は jessie より古いものは置いてないので出てこないだけですね.

$ zcat /usr/share/doc/apticron/changelog.gz|tail -5
apticron (1.0.1) unstable; urgency=low

  * Initial Release.

 -- Colm MacCarthaigh   Fri,  9 Aug 2002 11:53:26 +0100

OpenSSLでSHA512のPASSWORDを生成する

Linux の /etc/shadow のsha512形式の暗号化パスワードを生成するのに OpenSSL を利用したメモです.

最近は SHA512 が規定値になっている

$ grep ^ENCRYPT_METHOD /etc/login.defs
ENCRYPT_METHOD SHA512

openssl passwd は 1.1.1 から sha512 がサポートされている

*) 'openssl passwd' can now produce SHA256 and SHA512 based output,

-6 オプションが SHA512

$ openssl version
OpenSSL 1.1.1a  20 Nov 2018 (Library: OpenSSL 1.1.1b  26 Feb 2019)
$ openssl passwd --help
Usage: passwd [options]
Valid options are:
 -help               Display this summary
 -in infile          Read passwords from file
 -noverify           Never verify when reading password from terminal
 -quiet              No warnings
 -table              Format output as table
 -reverse            Switch table columns
 -salt val           Use provided salt
 -stdin              Read passwords from stdin
 -6                  SHA512-based password algorithm
 -5                  SHA256-based password algorithm
 -apr1               MD5-based password algorithm, Apache variant
 -1                  MD5-based password algorithm
 -aixmd5             AIX MD5-based password algorithm
 -crypt              Standard Unix password algorithm (default)
 -rand val           Load the file(s) into the random number generator
 -writerand outfile  Write random data to the specified file

こんな感じで作れる
$ が区切り文字になっていて, 6 部分が暗号形式のid,SALT 部分がsalt,その後ろが暗号化パスワードになっている

$ openssl passwd -salt SALT -6 PASSWORD
$6$SALT$io0TPmhM8ythCm7Idt0AfYvTuFCLyA1CMVmeT3EUqarf2NQcTuLKEgP9.4Q8fgClzP7OCnyOY1wo1xDw0jtyH1

この文字列を, /etc/shadow の第2フィールドに埋め込むとlogin に利用できる

SALT もランダムにしたい場合は,
/dev/random や

$ tr -cd '[:alnum:]' < /dev/random | head -c 8
ouOpUJoq

openssl rand が使える

$ openssl rand --help
Usage: rand [flags] num
Valid options are:
 -help               Display this summary
 -out outfile        Output file
 -rand val           Load the file(s) into the random number generator
 -writerand outfile  Write random data to the specified file
 -base64             Base64 encode output
 -hex                Hex encode output
 -engine val         Use engine, possibly a hardware device
$ openssl rand -base64 6
Gy/YhLzM

salt 8 文字で sha512 なパスワードを作成

$ openssl passwd -6 -salt $(openssl rand -base64 6) PASSWORD
$6$O2bwYkq/$QIIeAsVueV3vfGZqK/obGMevpB3DwRb/wq2uqn3ykdst1hEV3.72cGPu3gX0p3mD5KPWNrK0M6OPdElDPGD000

実際に /etc/shadow に設定して認証を試してみる

$ sudo useradd testuser
$ sudo sed -i 's,^testuser:[^:]*,testuser:$6$O2bwYkq/$QIIeAsVueV3vfGZqK/obGMevpB3DwRb/wq2uqn3ykdst1hEV3.72cGPu3gX0p3mD5KPWNrK0M6OPdElDPGD000,' /etc/shadow
$ sudo grep ^testuser: /etc/shadow
testuser:$6$O2bwYkq/$QIIeAsVueV3vfGZqK/obGMevpB3DwRb/wq2uqn3ykdst1hEV3.72cGPu3gX0p3mD5KPWNrK0M6OPdElDPGD000:17970:0:99999:7:::
$ su testuser
Password:
$ whoami
testuser
$

openssl のバージョンが古くてSHA512に対応していない場合は適当なscriptで生成できる
salt を同じものにして試すと同じ文字列が得られるのが確認できる

$ perl -e 'print crypt("PASSWORD", ( "\$6\$" . "O2bwYkq/" ));'
$6$O2bwYkq/$QIIeAsVueV3vfGZqK/obGMevpB3DwRb/wq2uqn3ykdst1hEV3.72cGPu3gX0p3mD5KPWNrK0M6OPdElDPGD000
$ python -c "import crypt, getpass, pwd; print crypt.crypt('PASSWORD','\$6\$O2bwYkq/\$')"
$6$O2bwYkq/$QIIeAsVueV3vfGZqK/obGMevpB3DwRb/wq2uqn3ykdst1hEV3.72cGPu3gX0p3mD5KPWNrK0M6OPdElDPGD000

環境

$ dpkg-query -W openssl login
login   1:4.5-1.1
openssl 1.1.1a-1
$ lsb_release -dr
Description:    Debian GNU/Linux buster/sid
Release:        testing
$ uname -m
aarch64

参考URL

特定グループでのみ dmesg command を有効にする

Debian の linux 4.8.0 以降で一般ユーザによる dmesg が無効化されたので,kernelパラメータの kernel.dmesg_restrict を修正して dmesg command を一般ユーザでも実行できるようにしましたがこれだと全ユーザで実行できてしまいます.sudo を設定してログの読める adm ユーザだけが dmesg command を実行できるようにしてみました.

dmesgを実行したいユーザをadm group に登録する(loginし直して反映しておく)

$ sudo addgroup matoken adm
$ exit

visudo command で /etc/sudoers を編集して adm group は NOPASSWD で dmesg command を実行できるようにする(念の為編集前にもう1枚端末を開いて sudo -s しておいたり,at等で5分後に /etc/sudoers を巻き戻すようにしておくとミスっても安心)

$ sudo visudo
$ sudo git diff /etc/sudoers
diff --git a/sudoers b/sudoers
index d4cc632..ac3bd77 100644
--- a/sudoers
+++ b/sudoers
@@ -21,6 +21,7 @@ root  ALL=(ALL:ALL) ALL

 # Allow members of group sudo to execute any command
 %sudo  ALL=(ALL:ALL) ALL
+%adm   ALL=NOPASSWD: /usr/bin/dmesg

 # See sudoers(5) for more information on "#include" directives:

adm group のユーザでdmesg コマンドが追加されているのを確認

$ sudo -l | grep dmesg
    (root) NOPASSWD: /usr/bin/dmesg

adm group のユーザが認証無しで sudo dmesg が実行できるのを確認

$ id | grep -o adm
adm
$ sudo dmesg -H | tail -1
[  +0.015080] smsc95xx 1-1.1:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1

このとき kernel.dmesg_restrict = 1 で sudo を通さないと dmesg は実行できない

$ cat /proc/sys/kernel/dmesg_restrict
1
$ dmesg 
dmesg: read kernel buffer failed: Operation not permitted
$ LC_MESSAGES=ja_JP.UTF-8 dmesg 
dmesg: read kernel buffer failed: 許可されていない操作です

~/.profile にalias を設定

$ echo 'alias dmesg="sudo dmesg"' | tee -a ~/.profile                                                                                                                                   
alias dmesg="sudo dmesg"
$ source ~/.profile
$ dmesg -H | tail -1
[  +0.015080] smsc95xx 1-1.1:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1

環境

$ dpkg-query -W sudo util-linux linux-image-*
linux-image-4.19.0-2-arm64      4.19.16-1
linux-image-4.19.0-2-arm64-unsigned
linux-image-arm64       4.19+102
sudo    1.8.27-1
util-linux      2.33.1-0.1
$ lsb_release -dr
Description:    Debian GNU/Linux buster/sid
Release:        testing
$ uname -a
Linux rpi3 4.19.0-2-arm64 #1 SMP Debian 4.19.16-1 (2019-01-17) aarch64 GNU/Linux
$ cat /proc/device-tree/model ;echo
Raspberry Pi 3 Model B Rev 1.2

Debian buster/sid でdmesgを一般ユーザで実行

※この方法だと全ユーザで dmesg が実行できてしまうので sudo を使ってグループを制限する次の方法のほうがいいかもしれない.


Debian buster arm64 環境を作りました( Raspberry Pi 3 Model B の USB起動で Debian buster arm64 を動かす – matoken’s meme )が,dmesg でエラーとなります.sudo dmesg は動く.

$ dmesg 
dmesg: read kernel buffer failed: Operation not permitted
$ LC_MESSAGES=ja_JP.UTF-8 dmesg 
dmesg: read kernel buffer failed: 許可されていない操作です

そういえば以前 Debian sid amd64 でも起こった現象です.
Debian では Linux 4.8.0 から仕様が変わってroot 以外ではdmesg が読めないようになっています.log file の読める adm group のユーザも駄目.
これは kernelパラメータの kernel.dmesg_restrict で設定されていて以下のようなコマンドで確認できます.

$ sudo sysctl -a|grep dmesg
kernel.dmesg_restrict = 1
$ cat /proc/sys/kernel/dmesg_restrict
1

これを 1 から 0 に変更することで以前と同じ動作となります.sysctl コマンドや,

$ sudo sysctl -w kernel.dmesg_restrict=0

/proc/sys/kernel/dmesg_restrict を直接書き換えることで一時的に変更できます.

echo 0 | sudo tee /proc/sys/kernel/dmesg_restrict

動きました.

$ id | grep -o adm
$ echo hello | sudo tee /dev/kmsg 
hello
[  562.152729] hello
$ dmesg -H | tail
[  +0.019933] brcmfmac mmc1:0001:1: firmware: failed to load brcm/brcmfmac43430-sdio.clm_blob (-2)
[  +0.020182] firmware_class: See https://wiki.debian.org/Firmware for information about missing firmware
[  +0.020886] brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43430-sdio.clm_blob failed with error -2
[  +0.021916] brcmfmac: brcmf_c_process_clm_blob: no clm_blob available (err=-2), device may have limited channels available
[  +0.026818] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM43430/1 wl0: Oct 23 2017 03:55:53 version 7.45.98.38 (r674442 CY) FWID 01-e58d219f
[  +0.077925] systemd-udevd[376]: link_config: autonegotiation is unset or enabled, the speed and duplex are not writable.
[  +0.537137] EXT4-fs (sda2): re-mounted. Opts: (null)
[  +2.001639] smsc95xx 1-1.1:1.0 eth0: hardware isn't capable of remote wakeup
[  +1.563625] smsc95xx 1-1.1:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1
[Mar 2 05:58] hello

再起動すると元に戻ってしまうので,/etc/sysctl.d/local.conf などに設定を書いてくと次回起動時以降も反映されます.

$ sudo install -m 644 -o root -g root /dev/null /etc/sysctl.d/local.conf
$ echo 'kernel.dmesg_restrict = 0' | sudo tee -a /etc/sysctl.d/local.conf
kernel.dmesg_restrict = 0

試した環境

$ dmesg --version
dmesg from util-linux 2.33.1
$ dpkg-query -W util-linux linux-image-*
linux-image-4.19.0-2-arm64      4.19.16-1
linux-image-4.19.0-2-arm64-unsigned
linux-image-arm64       4.19+102
util-linux      2.33.1-0.1
$ lsb_release -dr
Description:    Debian GNU/Linux buster/sid
Release:        testing
$ uname -a
Linux rpi3 4.19.0-2-arm64 #1 SMP Debian 4.19.16-1 (2019-01-17) aarch64 GNU/Linux
$ cat /proc/device-tree/model ;echo
Raspberry Pi 3 Model B Rev 1.2

Raspberry Pi 3 Model B の USB起動で Debian buster arm64 を動かす

最近入手した(遅) RaspberryPi 3 model B で USB メモリ起動の Debian buster aarch64 を設定してみたときのメモです.

ジモティー経由で Raspberry Pi 3 model B を入手しました.Raspberry Pi 3 model B + USB Wi-Fi + USB Bluetooth + ケースのセットが2,500円 + 送料手数料 500円と安いです.普通に新品で買うと 8,000円近くすると思います.今この記事を書いている時点で未だ在庫はあるようなので興味のある人は買うといいかもしれません.(6個同梱可能なのでそれだと1個あたりが少し安くなるので近所の友達と買うといいかも)

IMG-20190208-184136IMG-20190208-185154IMG-20190208-185222IMG-20190213-212056

64bitになった Raspberry Pi は欲しいと思っていたので安く手に入って助かりました :)
(後継の Raspberry Pi 3 Model B+/A+ や,SoCが 3B と同じで無線機能のない 2B v1.2 とかも欲しいですね.)

Raspberry Pi 3 model B は 32bitだけでなく64bit も利用できるハードウェアです.せっかくなので 64bitで動かしたいけど今の時点では Raspbian は 32bitのみです.そこで Debian の arm64 を試すことにしました.

Raspberry Pi 3 用 Debian buster arm64 イメージの入手とUSBメモリへの書き込み

イメージは岩松さんの東京エリアDebian勉強会の資料を真似して作ろうと思っていたのですが,

DebianWiki の RaspberryPi3 の項目を見たら非公式だけどイメージがあったので今回はそれを利用しました.現在 testing の Buster のイメージが入手できます.

ストレージは通常 microSD を利用しますが,手持ちがないのと Raspberry Pi 3 B はUSB起動が可能なはずなのでUSBメモリを利用することにしました.USB 2.0接続の容量2GBのものを用意しました.

このような感じでイメージを入手してハッシュのチェックをした後USBメモリへ書き込みました.ここでは Linuxのddコマンドで書き込んでいますが,Etcherなどを利用すると色々な環境でGUIでの書き込みが可能です.
※イメージは最新のものを利用するようにしましょう.

$ wget -c https://people.debian.org/~gwolf/raspberrypi3/20190206/20190206-raspberry-pi-3-buster-PREVIEW.img.xz https://people.debian.org/~gwolf/raspberrypi3/20190206/20190206-raspberry-pi-3-buster-PREVIEW.img.xz.sha256
$ sha256sum -c ./20190206-raspberry-pi-3-buster-PREVIEW.img.xz.sha256
20190206-raspberry-pi-3-buster-PREVIEW.img.xz: 完了
$ xzcat 20190206-raspberry-pi-3-buster-PREVIEW.img.xz | pv | sudo dd of=/dev/sdb bs=1M oflag=dsync

USBから起動できるようOTPを設定する

注意:OTPの設定は1度しか出来ないし,元に戻すことも出来ないと思われます.起動時間が長くなるなどデメリットもあるので気をつけて設定してください.

このUSBメモリを Raspberry Pi に接続して電源を入れてみましたが起動しません.恐らく OTP(One Time Programmable)メモリの設定が USB起動に対応していないので以下のページを参考に設定します.(Raspberry Pi 3+ シリーズは標準でUSB起動可能なのでこの設定は不要なはずです.)

先ず Raspbian 2017-04-10 以降のイメージを書き込んだ microSD を用意して起動します.
( uart経由で繋ぎたい場合起動前に /boot/config.txt に enable_uart=1 を書いておきます. $ echo enable_uart=1 | tee -a /media/matoken/boot/config.txt )

OTP を確認するとやはり有効になっていませんでした.

pi@raspberrypi:~$ vcgencmd otp_dump | grep ^17:
17:1020000a

以下のように /boot/config.txtprogram_usb_boot_mode=1 を追記して再起動すると反映されます.

$ echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt
program_usb_boot_mode=1
pi@raspberrypi:~$ sudo reboot

17 が 3020000a に変わればOK

pi@raspberrypi:~$ vcgencmd otp_dump | grep ^17:
17:3020000a

詳細は以下を参照してください

17 – bootmode register

Bit 1: sets the oscillator frequency to 19.2MHz
Bit 3: enables pull ups on the SDIO pins
Bit 19: enables GPIO bootmode
Bit 20: sets the bank to check for GPIO bootmode
Bit 21: enables booting from SD card
Bit 22: sets the bank to boot from
Bit 28: enables USB device booting
Bit 29: enables USB host booting (ethernet and mass storage)

設定前が,1020000a -> 0b010000001000000000000000001010 で設定後が,0x3020000a -> 0b110000001000000000000000001010 てことで,Bit 29 が 0 から 1 になってネットワーク起動とUSB起動を試すようにります.この状態で microSD 起動を試すとこれも大丈夫でした.(優先度は microSD > USB,Networkは未確認)

USBメモリからの起動

この状態で shutdown し,microSD を取り出して Debian の導入した USB メモリを接続して起動で起動しました.(USB起動の場合なかなか起動が始まらず焦ったけど30秒ほど待つとUARTにログが出はじめる.HDMIの出力は未確認)

login は root:raspberry
ちゃんと 64bit です :)

root@rpi3:~# uname -a
Linux rpi3 4.19.0-2-arm64 #1 SMP Debian 4.19.16-1 (2019-01-17) aarch64 GNU/Linux

細々とした設定(ほぼ余録)

パッケージの更新

root@rpi3:~# apt update && apt upgrade

一般ユーザの追加

root@rpi3:~# useradd -m matoken
root@rpi3:~# passwd matoken
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
root@rpi3:~# chsh matoken -s /bin/bash

OpenSSH の設定変更

root@rpi3:~# diff -u /etc/ssh/sshd_config.old /etc/ssh/sshd_config
--- /etc/ssh/sshd_config.old    2019-02-06 15:15:46.940904823 +0000
+++ /etc/ssh/sshd_config        2019-02-16 13:17:17.076873278 +0000
@@ -29,7 +29,7 @@
 # Authentication:

 #LoginGraceTime 2m
-PermitRootLogin yes
+PermitRootLogin prohibit-password
 #StrictModes yes
 #MaxAuthTries 6
 #MaxSessions 10
@@ -53,7 +53,7 @@
 #IgnoreRhosts yes

 # To disable tunneled clear text passwords, change to no here!
-#PasswordAuthentication yes
+PasswordAuthentication no
 #PermitEmptyPasswords no

 # Change to yes to enable challenge-response passwords (beware issues with
@@ -119,3 +119,5 @@
 #      AllowTcpForwarding no
 #      PermitTTY no
 #      ForceCommand cvs server
+
+AllowGroups sshusers

sshusers グループを作成して ssh login 出来るユーザを登録

root@rpi3:~# sudo groupadd sshusers
root@rpi3:~# sudo usermod -a -G sshusers matoken

短いmodulus を削除する

root@rpi3:~# awk '$5>=3071' /etc/ssh/moduli | tee /etc/ssh/moduli.tmp
root@rpi3:~# wc -l /etc/ssh/moduli /etc/ssh/moduli.tmp
    427 /etc/ssh/moduli
    368 /etc/ssh/moduli.tmp
    795 total
root@rpi3:~# sudo mv /etc/ssh/moduli.tmp /etc/ssh/moduli

hostpcからssh公開鍵をcpしておく

$ ssh-copy-id -i ~/.ssh/id_ed25519_pi.pub matoken@rpi3

ssh鍵ペアを作っておく

root@rpi3:~# sudo -u matoken ssh-keygen -t ed25519

sshd の再起動

root@rpi3:~# systemctl restart ssh

ssh login時に通知を飛ばすようにしておく

root@rpi3:~# vi /etc/ssh/sshrc
root@rpi3:~# chmod +x /etc/ssh/sshrc
root@rpi3:~# cat /etc/ssh/sshrc
#!/bin/sh

/home/matoken/bin/telegram.sh sshrc:${USER}@`hostname`:${SSH_CONNECTION}
/home/matoken/bin/sms.sh sshrc:${USER}@`hostname`:${SSH_CONNECTION}

ssh でパスワードログインできず,鍵認証でログインが出来る&通知が飛ぶのを確認

root@rpi3:~# ssh root@localhost -o PasswordAuthentication=yes
root@rpi3:~# ssh matoken@localhost -o PasswordAuthentication=yes
root@rpi3:~# ssh matoken@localhost -i ~/.ssh/id_ed25519

自分のネットワークに合わせて /etc/iptables/rules.v4, /etc/iptables/rules.v6 を変更.

root@rpi3:~# grep -v ^# /etc/iptables/rules.v4
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -s 127.0.0.0/8 -m comment --comment "RFC3330 loopback" -j ACCEPT
-A INPUT -s 192.168.1.0/24 -m comment --comment "RFC1918 reserved" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m comment --comment SSH -j REJECT --reject-with icmp-port-unreachable
COMMIT
root@rpi3:~# grep -v ^# /etc/iptables/rules.v6
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -s ::1/128 -m comment --comment "RFC3513 loopback" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m comment --comment SSH -j REJECT --reject-with icmp6-port-unreachable
COMMIT

sudo を導入して設定

root@rpi3:~# apt install sudo

sudo groupにユーザを登録

root@rpi3:~# usermod -a -G sudo matoken

sudo が利用できるのを確認

matoken@rpi3:~$ sudo grep ^root: /etc/shadow
sudo: unable to resolve host rpi3: Name or service not known
root:!..VyaTFxP8kT6:17933:0:99999:7:::

rootユーザをロック

$ sudo passwd -l root 
sudo: unable to resolve host rpi3: Name or service not known
passwd: password expiry information changed.
matoken@rpi3:~$ sudo passwd -S root
sudo: unable to resolve host rpi3: Name or service not known
root L 02/06/2019 0 99999 7 -1

sudo時などに「sudo: unable to resolve host rpi3: Name or service not known」と言われるので hosts の localhost に rpi3 を追加

matoken@rpi3:~$ sudo vi /etc/hosts
127.0.0.1 localhost rpi3

ここで再起動すると rootfs が見つからないと言われ起動しない.

(initramfs) Gave up waiting for root file system device. Common problems:
- Boot args (cat /proc/cmdline)
- Check rootdelay= (did the system wait long enough?)
- Missing modules (cat /proc/modules; ls /dev)
ALERT! /dev/mmcblk0p2 does not exist. Dropping to a shell!


BusyBox v1.27.2 (Debian 1:1.27.2-3) built-in shell (ash)
Enter 'help' for a list of built-in commands.

cmdline では /dev/mmcblkp2 から起動しようとしているが, /dev/sda2 から起動したい

(initramfs) ls /dev
block tty12 tty47
bsg tty13 tty48
bus tty14 tty49
char tty15 tty5
console tty16 tty50
core tty17 tty51
cpu_dma_latency tty18 tty52
disk tty19 tty53
fb0 tty2 tty54
fd tty20 tty55
full tty21 tty56
gpiochip0 tty22 tty57
gpiochip1 tty23 tty58
input tty24 tty59
kmsg tty25 tty6
kvm tty26 tty60
mem tty27 tty61
memory_bandwidth tty28 tty62
network_latency tty29 tty63
network_throughput tty3 tty7
null tty30 tty8
port tty31 tty9
psaux tty32 ttyAMA0
ptmx tty33 ttyS0
pts tty34 ttyS1
random tty35 ttyS2
sda tty36 ttyS3
sda1 tty37 urandom
sda2 tty38 vcs
snapshot tty39 vcs1
stderr tty4 vcsa
stdin tty40 vcsa1
stdout tty41 vcsu
tty tty42 vcsu1
tty0 tty43 vga_arbiter
tty1 tty44 zero
tty10 tty45
tty11 tty46
(initramfs) cat /proc/cmdline
bcm2708_fb.fbwidth=656 bcm2708_fb.fbheight=416 bcm2708_fb.fbswap=1 dma.dmachans=0x7f35 bcm2709.boardrev=0xa02082 bcm2709.serial=0xfaf144 bcm2709.uart_clock=48000000 smsc95xx.macaddr=B8:27:EB:FA:F1:44 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000 console=tty0 console=ttyS1,115200 root=/dev/mmcblk0p2 rw elevator=deadline fsck.repair=yes net.ifnames=0 cma=64M rootwait

/boot を mount して書き換えようと思ったけどうまく mount 出来ない?

(initramfs) mkdir /tmp/boot
(initramfs) mount /dev/sda1 /tmp/boot
mount: mounting /dev/sda1 on /tmp/boot failed: Invalid argument
(initramfs) ls -la /dev/sda1 /tmp/boot
brw-------    1 0        0           8,   1 Jan  1 00:00 /dev/sda1

/tmp/boot:
total 0
drwxr-xr-x    2 0        0                0 Jan  1 00:10 .
drwxr-xr-x    3 0        0                0 Jan  1 00:10 ..
(initramfs) mount -t vfat /dev/sda1 /tmp/boot
mount: mounting /dev/sda1 on /tmp/boot failed: No such device
(initramfs) mkdir /tmp/root
(initramfs) modprobe ext4
(initramfs) mount /dev/sda2 /tmp/root
[ 2144.515323] EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null)
(initramfs) find /tmp/root -name "vfat.ko"
/tmp/root/usr/lib/modules/4.19.0-2-arm64/kernel/fs/fat/vfat.ko
(initramfs) modprobe -v /tmp/root/usr/lib/modules/4.19.0-2-arm64/kernel/fs/fat/vfat.ko
(initramfs) lsmod|grep fat
(initramfs) mount -t vfat /dev/sda1 /tmp/boot
mount: mounting /dev/sda1 on /tmp/boot failed: No such device
(initramfs) lsmod|grep fat

一旦電源を切って /boot/cmdline.txt の root=/dev/mmcblk0p2 を root=/dev/sda2 に書き換えて起動するようになった.(LABEL指定に変えたほうがいいかな)

$ cat /boot/firmware/cmdline.txt 
console=tty0 console=ttyS1,115200 root=/dev/sda2 rw elevator=deadline fsck.repair=yes net.ifnames=0 cma=64M rootwait

raspi3-firmware あたりのアップデートが掛かると上書きされるよう.

systemd から sysvinit に変更(RAMが開くかと思ったけど数MB程度だった)

$ sudo apt install sysvinit-core sysvinit-utils

LANGを設定
en_US.UTF-8 UTF-8, ja_JP.UTF-8 UTF-8 を有効にして,デフォルトロケールを ja_JP.UTF-8 にしたりした.

$ sudo dpkg-reconfigure locales
$ echo 'export LANG="ja_JP.UTF-8"
export LC_TIME="en_US.UTF-8"' | tee -a ~/.profile
$ source ~/.profile
$ locale
LANG=ja_JP.UTF-8
LANGUAGE=
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME=en_US.UTF-8
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=

Raspberry Pi には rtc がなくて再起動などで時計が初期化されてしまうので fake-hwclock を導入(電源断時などの時間はカウントされないので時間がずれるが時計が巻き戻らない)

$ sudo apt install fake-hwclock

ntpdate を導入して起動時の時計合わせをするようにする(systemdのままだとntpの面倒を見てくれるので必要ない)

$ sudo apt install ntpdate
$ sudo vi /etc/boot.d/ntpdate
$ cat /etc/boot.d/ntpdate
#!/bin/sh

ntpdate 1.jp.pool.ntp.org
$ sudo chmod +x /etc/boot.d/ntpdate

ntpdate iptables に合わせてこっちのほうがいいかも?(有線接続後に時計合わせする)

$ cat /etc/network/interfaces.d/eth0 
auto eth0

# TODO: switch back to iptables-persistent once it re-enters testing
iface eth0 inet dhcp
        pre-up iptables-restore < /etc/iptables/rules.v4
        pre-up ip6tables-restore < /etc/iptables/rules.v6
        up ntpdate 1.jp.pool.ntp.org

uartでsetial接続するために /etc/inittab に以下を設定(systemdだと設定済みなので不要)

T1:23:respawn:/sbin/getty -L ttyS1 115200 vt100

msmtpを導入してメールを飛ばせるように

$ sudo apt install msmtp
$ sudo vi /etc/msmtprc
$ grep -v ^# /etc/msmtprc|uniq
defaults
syslog on
aliases /etc/aliases

tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
auth on
syslog LOG_MAIL

account gmail
host smtp.gmail.com
port 587
from matohara@gmail.com
user matohara
password throjfeekdewxeib

account default : gmail
$ sudo vi /etc/aliases
$ grep -v ^# /etc/aliases
mailer-daemon:hoge@example.com
postmaster:hoge@example.com
nobody:hoge@example.com
hostmaster:hoge@example.com
usenet:hoge@example.com
news:hoge@example.com
webmaster:hoge@example.com
www:hoge@example.com
ftp:hoge@example.com
abuse:hoge@example.com
noc:hoge@example.com
security:hoge@example.com
root: hoge@example.com
default: hoge@example.com
$ echo 'hello' | msmtp matoken@ya.ru
$ sudo apt install msmtp-mta
$ echo 'hello' | /usr/sbin/sendmail matoken@ya.ru

無線を無効にするために /boot/firmware/config.txt に以下を追記……再起動しても反映されない?要確認

dtoverlay=pi3-disable-wifi
dtoverlay=pi3-disable-bt

apticron を導入して更新をメールで通知する

$ sudo apt install apticron
$ sudo cp -p /usr/lib/apticron/apticron.conf /etc/apticron/
$ grep ^EMAIL= /etc/apticron/apticron.conf #必要なら宛先を書き換えたり
EMAIL="root"

deborphan でみなしごパッケージを通知するようにする

$ sudo apt install deborphan
$ sudo crontab -e
$ sudo crontab -l | grep deborphan | grep -v ^#
7 4 * * *       deborphan && printf "\nsudo apt --autoremove purge \$( deborpha)'

てことでとりあえず動くようになったけど昔もらったノベルティのUSBメモリなのでこのまま運用すると多分すぐ壊れてしまうと思います.
最近秋葉原でセールになっている様な安い SSD とか欲しいですね.

こちらは起動終了のUARTのメッセージ

asciicast

Debian, Ubuntu で 上流のパッケージを借りてくる

以前以下のような記事を書きました.

今でもこのblogの中ではアクセスが多く,最近もトラックバックをもらいました.

この当時は arm64 の mozcパッケージがなくて自分でbuild したという話なのですが,現在はDebian では buster(testing), Ubuntu ではartful(17.10) 以降でパッケージが存在します.
なのでこの野良パッケージを使うよりも公式の上流パッケージを借りるほうが大抵の場合いいと思います.
ということで手順を書いておきます.

パッケージファイルだけが必要な場合はパッケージのページからダウンロード可能です.

野良パッケージは近日中に削除します.

Debian stretch arm64 に Debian buster arm64 の mozc を借りてくる

Debian stretch arm64 では mozc-data しかない
$ apt-cache search mozc
mozc-data - Mozc input method - data files

buster(testing) のmozc を借りてくることにする.

/etc/apt/preferences で buster の優先度を下げる

/etc/apt/preferences
Package: *
Pin: release n=buster
Pin-Priority: 100
/etc/apt/sources.list に buster(testing)追加 設定
deb http://deb.debian.org/debian buster main

sources.list の編集には apt edit-sources を使うと文法チェックをしてくれるのでおすすめ

パッケージ情報の更新
$ sudo apt update
mozcパッケージの確認
$ apt-cache search mozc
mozc-data - Mozc input method - data files
fcitx-dbus-status - Addon for Fcitx to set/get/monitor IM statuses via D-Bus
emacs-mozc - Mozc for Emacs
emacs-mozc-bin - Helper module for emacs-mozc
fcitx-mozc - Mozc engine for fcitx - Client of the Mozc input method
ibus-mozc - Mozc engine for IBus - Client of the Mozc input method
mozc-server - Server of the Mozc input method
mozc-utils-gui - GUI utilities of the Mozc input method
uim-mozc - Mozc engine for uim - Client of the Mozc input method
パッケージの導入
$ apt install fcitx-mozc -t buster

後は通常の apt update && apt upgrade で stretch で導入したパッケージは stretch で,buster で導入したパッケージはbuster で更新されるはず.

Ubuntu 16.04 LTS xenial arm64 に Ubuntu 18.04 LTS bionic arm64 の mozc を借りてくる

Debianの手順と同じでもokだと思うけど念の為以下の手順を真似してみる.

mozc は Ubuntu 17.10 artful から対応しているが,もうサポートされないのでUbuntu 18.04 bionic を使う.

標準のリリースを xenial に設定

/etc/apt/apt.conf.d/01ubuntu
APT::Default-Release "xenial";

mozc をpinningする

/etc/apt/preferences
Package: *mozc*
Pin: release n=xenial
Pin-Priority: -10

Package: *mozc*
Pin: release n=bionic
Pin-Priority: 900

/etc/apt/sources.list に buster(testing) を 追加 設定

/etc/apt/sources.list
deb http://ports.ubuntu.com/ bionic main universe

※sources.list の編集には apt edit-sources を使うと文法チェックをしてくれるのでおすすめ
※mirrorにより arm64 が置かれていないので注意

パッケージ情報の更新
$ sudo apt update
検索結果にmozcが出てくる
$ apt-cache search mozc
mozc-data - Mozc input method - data files
ibus-mozc - Mozc engine for IBus - Client of the Mozc input method
mozc-server - Server of the Mozc input method
mozc-utils-gui - GUI utilities of the Mozc input method
emacs-mozc - Mozc for Emacs
emacs-mozc-bin - Helper module for emacs-mozc
fcitx-mozc - Mozc engine for fcitx - Client of the Mozc input method
uim-mozc - Mozc engine for uim - Client of the Mozc input method
パッケージの導入
$ sudo apt install fcitx-mozc -t bionic