Manabii の紹介

無気力です。

Echo Spot を買ってしまった

正直言って、スマートスピーカーって事実上、合意を持ってサービス提供者からの盗聴を許している様なものなので、全く興味が無かったのだけれど、スクリーンが付いただけでなぜか抵抗感がなくなって買ってしまった。

おそらく、ディスプレイが付くことで端末の動作が視覚化されるので、Echo Spot にはカメラも付いているにもかかわらず抵抗感が減るのではと思う。

セットアップ自体は簡単で、Echo Spot 本体でできる。しかし、ディスプレイのない Echo の場合は、スマートフォンのアプリから設定するのだが、Echo Spot の場合はこれが出来ない。Echo Spot でも同様に出来ると楽なのにと感じた。

単にネットに繋ぐだけなら非常に簡単でよく考えられているとは思うけれど、MAC アドレスフィルタしている Wi-Fi AP に接続する場合はちょっと面倒くさい。

と言うのも、自分が確認した範囲では、Echo Spot の設定が完了していないと、自身の MAC アドレスを知る方法がなかったためである。

と言うことで、一旦 MAC アドレスフィルタのかかっていない AP を設定して、そこに設定してからセットアップし、スマートフォンのアプリから Echo Spot の MAC アドレスを確認し、こちらを AP に登録という手順を踏んで接続という若干面倒な設定となった。これは初期画面に MAC アドレスを表示しても良いのではとは思う。

セットアップ後の動作は問題なく、音声もかなりの精度で認識してくれる。初めてスマートスピーカーを使ってみたのだけれど、音声で指示が出来るのは、ちょっとスター・トレック感があって面白い。

機能の拡張も、スキルを導入することで可能で、これがクラウド側で完結しているのもよく出来ていると思った。色々なスキルを試してみて、ちょっと遊んでみようと思う。

Soundflower で音声を出力しつつ録音する

Soundflower のページに記載されているが、macOS High Sierra において、Soundflower でシステム音声を録音する際に、通常の音声出力にも出力する方法の備忘録。

  1. 「Audio MIDI 設定」を起動して、「オーディオ装置」ウィンドウより、「+」ボタンをクリックし、「複数出力装置を作成をクリック」。
  2. 「複数出力装置」を選択し、右ペインより「内蔵出力」と「Soundflower (2ch)」の「使用」と「音ずれ補正」をチェックする。
  3. 「システム環境設定」を起動し、「サウンド」を選択。
  4. 「出力」を選択し、「サウンドを出力する装置を選択:」より「複数出力装置」を選択する。
  5. 録音するソフトウェア側で「Soundflower (2ch)」を選択する。

Linux: dbus の部分で起動に目茶苦茶時間がかかって、止まったかと思った件

私、sysvinit で Linux を運用していたのだけど、パッケージシステムでうっかり systemd が入ってしまい、再起動したところ dbus のところで起動しなくなった。(ように見えた)

目茶苦茶焦ったのだが、しばらく考え込んでいたところ、どうやらタイムアウトして起動してくれた。(ホッ)

ログを見てみたら、

dbus-daemon[xxxx]: [system] Failed to activate service 'org.freedesktop.systemd1': timed out (service_start_timeout=25000ms)

とのことで、/etc/nsswitch.conf の

passwd: compat systemd
group: compat systemd

passwd: compat
group: compat

に修正し、再起動で対応完了。

国道 157 号線で、岐阜県から福井県へ

岐阜県と福井県を結ぶ道路と言えば、国道 158 号線が最も使いやすいのではとは思うのですが、それとは別に、

があります。

今回、6 月 20 日頃に、福井県側の通行止めが解除されたので、国道 157 号線を用いて、岐阜県から福井県へ抜けてみました。

岐阜県側のゲートです。写真には写ってはいませんが、この場所にあの「落ちたら死ぬ」の看板もあります。

続きを読む

Let’s Encrypt でワイルドカード 証明書を得る (nsd4 利用)

Let’s Encrypt でワイルドカード証明書を得るためには DNS-01 で認証を得る必要があります。

nsd4 と dehydrated の組み合わせで一応出来たので、備忘録として記載します。なお、マスターサーバ上で実装、bind9 付属の named-checkzone を利用しているので注意して下さい。

・/etc/nsd/zones/example.com (ゾーンファイルの修正)

nsd4 では、動的にゾーンのレコードを追加したり削除したり出来ないので、実際のゾーンファイルを直接書き換えます。

関係ないところを書き換えないためにも、シリアル値を「;SERIAL_START」から「;SERIAL_END」の範囲で、DNS-01 で使う「_acme-challenge」については「;LE_DNS-01_START」から「;LE_DNS-01_END」の範囲でくくります。

$TTL 86400
example.com.		IN	SOA	ns.example.com. root.ns.example.com. (
;SERIAL_START
				2018051301	; Serial
;SERIAL_END
				86400		; Refresh 24 Hours
				7200		; Retry 2 Hours
				1209600		; Expire 2 Weeks
				7200		; Negative cache TTL 2 Hours
			)

					IN	NS	ns.example.com.

;LE_DNS-01_START
;_acme-challenge.example.com.	60	IN	TXT	"NOTHING"
;LE_DNS-01_END

NS					IN	A	192.168.1.1

・hook.sh

dehydrated 同梱の hook スクリプトを以下の様にします。

#!/usr/bin/env bash

deploy_challenge() {
    local DOMAIN="${1}" TOKEN_FILENAME="${2}" TOKEN_VALUE="${3}"
    local REGEXDOMAINNAME=`echo ${DOMAIN} | sed -e 's/\./\\\./'`
    local NOWUMASK="`umask`"
    local serial1=`named-checkzone "${DOMAIN}" "/etc/nsd/zones/${DOMAIN}" | awk '/serial/ {print $5}'`
    local serial2=`expr $serial1 + 1`
    
    umask 022
    
    sed -i -e "/;SERIAL_START/,/;SERIAL_END/ s/$serial1/$serial2/" "/etc/nsd/zones/${DOMAIN}"
    sed -i -e "/;LE_DNS-01_START/,/;LE_DNS-01_END/ s/^;_acme-challenge\.${REGEXDOMAINNAME}\..*/_acme-challenge.${DOMAIN}.\t60\tIN\tTXT\t\"${TOKENVALUE}\"/" /etc/nsd/zones/${DOMAIN}
    nsd-control reload
    
    sleep 5
    
    umask ${NOWUMASK}
}

clean_challenge() {
    local DOMAIN="${1}" TOKEN_FILENAME="${2}" TOKEN_VALUE="${3}"
    local REGEXDOMAINNAME=`echo ${DOMAIN} | sed -e 's/\./\\\./'`
    local NOWUMASK="`umask`"
    local serial1=`named-checkzone "${DOMAIN}" "/etc/nsd/zones/${DOMAIN}" | awk '/serial/ {print $5}'`
    local serial2=`expr $serial1 + 1`
    
    umask 022
    
    sed -i -e "/;SERIAL_START/,/;SERIAL_END/ s/$serial1/$serial2/" "/etc/nsd/zones/${DOMAIN}"
    sed -i -e "/;LE_DNS-01_START/,/;LE_DNS-01_END/ s/^_acme-challenge\.${REGEXDOMAINNAME}\..*/;_acme-challenge.${DOMAIN}.\t60\tIN\tTXT\t\"NOTHING\"/" /etc/nsd/zones/${DOMAIN}
    nsd-control reload
    
    sleep 5
    
    umask ${NOWUMASK}
}

deploy_cert() {
}
deploy_ocsp() {
}
unchanged_cert() {
}
invalid_challenge() {
}
request_failure() {
}
generate_csr() {
}
startup_hook() {
}
exit_hook() {
}

HANDLER="$1"; shift
if [[ "${HANDLER}" =~ ^(deploy_challenge|clean_challenge|deploy_cert|deploy_ocsp|unchanged_cert|invalid_challenge|request_failure|generate_csr|startup_hook|exit_hook)$ ]]; then
  "$HANDLER" "$@"
fi

dehydrated の config ファイルの修正

DNS-01 と hook.sh を使う様に指定します。その他は適切に設定して下さい。

CHALLENGETYPE="dns-01"
HOOK=./hook.sh

dehydrated の domains.txt ファイルの修正

以下の様な書式で記載します。

*.example.com > wildcard.exaple.com

証明書発行

後は、いつもどおり証明書を要求すると、DNS-01 で認証され、発行されます。

その他

domains.txt で「example.com *.example.com」の様にすると、example.com に 2 回 DNS-01 認証が発生し、上手くいきませんでした。

iTunes が不安定だったので、再インストール (macOS High Sierra)

macOS High Sierra のソフトウェアアップデートで提供された、「iTunes 12.7.4.76」だが、うちの環境ではアップデート後から iTunes がフリーズする現象が多発したため、再インストールをした。

/Applications/iTunes.app を Finder 上から削除しようとしたところ、アクセス権がないためか、削除できない。

アクセス権を与えようにも、どうも macOS の必須コンポーネントになっているものはアプリケーションを与えられないどころか、ターミナルから root 権限で削除しようとしても削除できない。

ああ、そういえば、rootless という機能の影響かなと思い、Mac を Command + R で起動後、「ユーティリティ」メニューから「ターミナル」を起動し、

cd /Volumes/Macintosh\ HD/Applications
rm -rf iTunes.app

でサクッと削除できた。

あとは、Apple のサイトから、iTunes をダウンロードし、ソフトウェアアップデートを行って、最新版の iTunes にアップデートしたところ、問題が解決した。

cups から AirMac Extreme で共有されているプリンタに印刷および再度共有する設定メモ

表題の通り、cups が動作している Linux マシンから、AirMac Extreme に接続されているプリンタに印刷する設定である。

なお、例によって、Debian GNU/Linux 9 での設定例である。サーバは、192.168.1.1 、共有プリンタが接続されている AirMac Extreme は 192.168.1.2 とする。

・事前準備

iptables などでフィルタリングしている場合、あらかじめサーバから TCP 192.168.1.2:9100 宛への通信を許可する。

・cups のインストール

# apt-get install cups

・管理ユーザの設定

# adduser username lpadmin

cups の Web インタフェースへ管理画面接続可能な様に、任意の管理者ユーザ (この例では username) を lpadmin グループに所属させる。

・リモートのブラウザから設定

$ ssh -L 8080:127.0.0.1:631 username@192.168.1.1

リモートから、サーバ (この例では 192.168.1.1) の 631 ポートへポートフォワードし、ssh 接続する。

・ブラウザで、http://127.0.0.1:8080/ を開き cups の設定を行う

「管理」メニューより、以下の通り進める。なお、BASIC 認証画面が出たら、「管理ユーザの設定」の項目で設定したユーザ名とパスワードで認証する。

  1. 「このシステムに接続されているプリンターを共有」にチェックを入れる。
  2. プリンターの追加を選択。
  3. その他のネットワークプリンター内「AppSocket/HP JetDirect」にチェックし、「続ける」をクリックする。
  4. 接続に「socket://192.168.1.2:9100」の様に入力し、「続ける」をクリックする。
  5. 名前は適当にプリンタ名、説明も適当にメーカ名 + プリンタ名、場所もやっぱり適当に入力し、このプリンターを共有するにチェックを入れ、「続ける」をクリックする。
  6. AirMac Extreme に接続されているプリンタのメーカ名を選択し「続ける」をクリックする。
  7. AirMac Extreme に接続されているプリンタのモデルを選択し「プリンターの追加」をクリックする。
  8. 該当プリンタのデフォルトの設定画面が表示されるので、必要に応じて変更し「デフォルトオプションの設定」をクリックする。

・テスト印刷

「プリンター」メニューより、先ほど追加したプリンタを選択し「メンテナンス」内「テストページの印刷」を選択して、正しくプリントアウトされることを確認する。

・共有について

該当 Linux マシンには avahi をインストール済みのため、ローカルネットワークからサーバ TCP 631 宛の通信を許可するだけで、macOS から IPP 経由で印刷できるようになったりする。

ちなみに上記の設定だけで、iOS デバイスから AirPrint 可能なデバイスとして認識される。が、正常に印刷が出来たのは iOS 6 の端末のみで、iOS 11 からは正しく印刷できなかった。

2018/02/10 追記
iOS 11 においても、iOS アプリの「Printer Pro by Readdle」を使用すると、印刷することが出来た。
(追記おわり)

・参考にさせていただいたサイト