b-shock. Fortress

sshfsをセットアップ

GPD PocketにKVMのセットアップが完了した時点で、開発環境の構築は概ね完了。
仕上げに、KVM上のホームディレクトリをホストOSにマウント出来るようにする。 当然、sshfsを使用。

sshfsのインストール

1
sudo apt install sshfs

簡単すぎて拍子抜けするけど!

マウントを実行

インストール後はsshfsコマンドでマウント実行できるだが、 コマンドが長くて微妙に面倒なのでツールを書いた。

ホスト名が jara なホスト上で、このコマンドを以下のように使うと、

1
./mount.rb dev1

KVM dev1.jara.local 上のホームディレクトリが ~/mount/dev1 にマウントされる。
マウントポイントのディレクトリが存在しなければ、一応作成することを試しはするw

ソースを読んで頂けるとわかるけど、

  • ホストOSとゲストOSに同名のユーザーが居る。
  • ゲストOSのホスト名は、 hoge.jara.local という命名規則。

であることを前提とする。

自分で使うものなので、汎用的な用途を想定してないし、 エラー処理もほとんどやってません。
手を抜いてすみません。

開発環境、今後の課題

ちょっと重い

非力なCPUなので、仕方ないところではある。
PHP開発では是非利用したいxdebugだが、外さざるを得なかった。

手動で起動しなければいけない問題

Wi-Fiインターフェースが接続するまでに若干のタイムラグがあることに由来して、 仮想ネットワークとゲストOSは手作業で起動する必要がある。 (→前エントリ
この為、ゲストOS上のホームディレクトリをマウントするのも、ゲストOS起動後 でなければならない。 インターフェースが接続した後に、どうにかしてフックスクリプト的なものを 動かすことは可能?要調査。

周辺ツールの不足

今まで開発は主にMacでやってて、今後もそれは変わらないんだけど、 GPD Pocketもサブ環境として使っていこうと思っている。
Xubuntu(Ubuntu)の開発環境としての運用にはあまり知見がなく、 ここ数日ググって知ったわずかな情報で、以下のツールをだましだまし使ってる状況。

これでもまだ微妙に足りない。他にぱっと思いつくのは、JSONの専用エディタとか、 SQLiteクライアントとか。
当然ながら、Ubuntuは今までもずっと開発環境として使われ続けてきたわけだし、 満足できる環境はIDEなしでも必ず構築できると信じる。 よいツールを探す為の情報収集は、今後も続けたい。

Xubuntu@GPD PocketのKVMに、FreeBSDをセットアップ

MySQLに続き、PowerDNSについてのエントリーを上げようとセットアップしていたが、 大変なことに気づいた。
KVM環境の一要素であるlibvertに、目的とするネームサーバ機能が内蔵されており、 PowerDNSの構築は実際には不要だったのである。

確認したところ、ホストOSのresolv.confやhosts上の要素も全て透過的に参照可能で、 LAN内にあるサーバーも、今後構築予定の仮想環境(hostsに名前だけは登録済み)も 全て名前解決できた。今後新しい仮想環境を追加する時も、単にhostsに登録すれば いいみたい。
libvertのネームサーバ機能(及びDHCPサーバ機能)については、まだよくわかってない ことが多いので近々調べるとして、当初の予定を変更してKVM環境の構築の際に行った 手順について述べることにする。

ちなみに、ホストOS上のMySQLは不要になったので削除した。開発用のMySQLも確かに 必要ではあるが、検証目的の環境はゲストOS側に構築すべきと思われたので。
XubuntuにMySQLを構築した(地雷にハマった)経験は無駄ではなかったので、まぁ よしとする。以前ほぼ同じ環境(Ubuntu Server 16.04 LTS)にセットアップした時は、 もっとすんなり行ったのだけどな。

KVMの導入を行う際、以下のページを参考にした。

どちらも若干古い記事で、実際には、これらのページに書かれている多くの手順は 対応不要だった。
以下、実際に必要だった手順についてのみ述べる。

KVMをインストール

1
sudo apt install kvm libvirt-bin bridge-utils virt-manager

ブリッジの登録を確認

以下を実行すると、

1
brctl show

virbr0というブリッジが登録されているので、そのまま使えばよいはず。通常は作業不要。
virbr0を誤って削除してしまった場合は、以下の手順で再登録できた。

1
2
3
sudo brctl addbr virbr0
sudo brctl stp virbr0 on
brctl show #登録されたことを再度確認

NetworkManagerを削除したり、/etc/network/interfacesを修正したりする手順が 案内されているが、GPD Pocketではこれは やってはいけない 。Wi-Fiが一切 動かなくなってハマる。

余談だが、もし削除してしまったら、USBポートにお手持ちのEthernetアダプタを挿して (持ってなかったら、いますぐAmazon等へ!2,000円ぐらいで買えるはず)、

ifconfig -aを実行して、そのアダプタのインターフェース名を確認。
私の場合は enx343dc49a00fb だったので、 /etc/network/interfaces に以下を 追記してリブート。

リブート後に有線接続できるようになるので、以下を実行すれば、

1
sudo apt install network-manager

Wi-Fi接続が復旧できる。
とはいえ割と煩雑な手順なので、GPD PocketではNetworkManagerを削除せぬ様、注意したい。

仮想ネットワークの登録を確認

ウィスカーメニューから、システム→仮想マシンマネージャーを起動。
仮想マシンマネージャーはよく使うので、お気に入り登録を推奨。

起動したら、編集→接続の詳細。
「QEMU/KVM接続の詳細」というウィンドウが開くので、「仮想ネットワーク」タブを 開く。defaultという仮想ネットワークが、virbr0ブリッジに紐付けられているはず なので、通常はこれを使えばよいはず。

但し、「自動起動」のチェックは外したほうがいいかも。Wi-Fi接続のタイミングに よっては、リブート後に仮想ネットワークが自動起動しないことが多かった。
リブートの度に、この画面の左下の方のほうにある「ネットワークの開始」ボタンを 押下し、手作業で起動操作を行うほうが動作が安定する。少々煩わしいけど。

追記(2017/10/03)
その後、この件は解決。自動起動で問題なし。
OpenVPNとKVM、その後。

新しい仮想ネットワークをここから登録することも出来るが、NAT先はwlp1s0を明示的に 指定すると安定するかもしれない。

新しい仮想マシンの作成

以下のサイトで、前もってFreeBSDのインストーライメージを取得しておく。

FreeBSDを入手する

仮想マシンマネージャーのウィンドウで、「新しい仮想マシンの作成」ボタンを押下。
取得したインストーライメージのisoファイルを指定し、接続先ネットワークには 上記手順で確認した仮想ネットワークが指定されていることを確認。あとは指示に従う。
ここから先は難しいところはなかった。また、FreeBSD以外のOSでも導入の手順は 全く同じと思われる。

仮想マシンも仮想ネットワーク同様、自動起動にしないほうがよさそう。
仮想ネットワークが起動している状態でないと、仮想マシンは起動できないので。

追記(2017/10/03)
その後、この件は解決。自動起動で問題なし。
OpenVPNとKVM、その後。

仮想マシンの起動

GPD Pocketのリブート後は、仮想ネットワーク→仮想マシンの順に手動で起動する。
この手順が結局、一番安定した利用ができた。

Xubuntu上でMySQL 5.7のセットアップ

Xubuntuへの開発環境の構築に着手した。
KVM上のFreeBSDを中心とし、ホストOS(Xubuntu)にPowerDNSやsshfsを導入して、 最終的にひとつのものにまとめる予定。

本稿では、PowerDNSの構成要素として、MySQL 5.7系を導入していく。
5.7系に地雷がたくさんある(その一方で性能も向上しているため、一概に避けるべき とは言えない)ことは承知していたが、実際には当初の予想も超えるトラブルに 見舞われた。
MySQLの導入なんて何度もやってるのに、ほんのちょっとのバージョン番号の違いで こんなに手こずるとは。古い話だが、4.1と4.0がまるで別物だったことを思い出す。

パッケージのインストール

1
sudo apt install mysql-server-5.7

これを入力したあとに出てくるパスワードに関する設問に要注意。極力パスワードは 入力して、空にはしないほうが、余計なトラブルを抱えずに済む。
ちなみに、 このパッケージをChef(のapt_packageリソース)から導入する場合、 空のパスワードを指定した扱いになる様なので、後述する手順でrootのパスワードを 変更する必要がある。

my.cnf設定

以下を実行すると、 /etc/my.cnf を直接記述するのと同様の要領で、 /etc/mysql/conf.d/local.cnf から設定変更が行えるようになる。
大本のmy.cnfにはほとんど何も書かれておらず、local.cnfをインクルードする 仕組みになってるみたい。いや、こっちのほうがシンプルで使いやすいな。

1
sudo update-alternatives --set my.cnf /etc/mysql/my.cnf.fallback

local.cnf に書き込む内容は、最低限のものとして以下のものを入れてる。
ローカルのPowerDNSから利用することを想定したMySQLなので、チューニングに関する 設定などは不要と思われる。

内容は大まかに、以下の通り。

  • パスワードは無期限に。
  • デフォルトのエンコーディングはutf8mb4。
  • ログはsyslogに出力する想定。
  • secure-file-privは別にどこでもいいけど、何かしら指定しないとwarning。

特筆すべきはパスワードの期限(default_password_lifetime)。MySQL 5.7系の 初期、明示的に0を指定しないと約1年でパスワードが使えなくなってしまう時期が あった。
言うまでもなく運用に重篤な支障がある為、現在はさすがに0がデフォルトになって いる。だが、一度このような機能が実装されてしまった以上は信用できない感があり、 5.7以降の全てのMySQLにおいて、default_password_lifetimeを明示的に 0に設定することを強くお勧めする次第。

その他お好みの設定を加えて頂き、設定を反映するためにMySQLを再起動。

1
sudo service mysql restart

rootパスワード変更

インストール時に空のrootパスワードを指定してしまった場合、結局空には ならないので、パスワードの再設定が必要。
Chefから導入を行った場合も、パスワードの指定が出来ない為、このケースに該当。 (default_password_lifetimeだけでなく、パスワードまわりは地雷満載だわ)
rootパスワードの更新については、以下の記事を参考にした。

Ubuntu16.04にaptでMySQL5.7を入れる時にrootを空パスワードにするとどうなるか

OSのroot権限からMySQLに接続する方法が紹介されているが(以下)、

1
sudo mysql

apt実行時にデフォルトで作成される特権ユーザー(rootユーザーと同様の操作が可能) を利用するのでもよい。
接続情報は以下の手順で確認できるので、お手元のEvernote等に控えておくと、 あとあと便利。

1
sudo cat /etc/mysql/debian.cnf

いずれかの方法でMySQLに接続したら、以下のSQLを実行し、rootパスワードの 変更を実行。

1
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';

WITH mysql_native_password が肝のようだ。

また、MySQLには古くから、mysql.userテーブルを直接修正するという方法もあるが、 mysql_native_passwordに変更してからでないとテーブルを書き換えても反映しない ので注意。
mysql_native_passwordに変更したあとであれば、従来通り、以下の手順でパスワードの 更新が可能。

1
2
UPDATE mysql.user SET authentication_string=password('your_password') WHERE user='root';
FLUSH PRIVILEGES;

従来通り?
かつてmysql.userテーブルにはpasswordというフィールドがあったはずだが、何故か、 authentication_stringなるわかりにくい名前に変更された。わけわからん。

このMySQLはPowerDNSで使用する想定なので、rootユーザー以外は不要と思われるが、 通常の用途では他にもユーザーを登録するはず。
確かMySQL 5.7系の初期では問題なかったと記憶するが(自信なし)、GRANTはあくまで 権限の付与を行うだけになり、存在しないユーザーを指定した時にユーザーを作成する という振る舞いは廃止された様だ。

また、aptで設置した場合は該当しないが、validate_passwordなるプラグインが有効の 場合、パスワードの更新時に多くの制限が課せられる様だ。
個人的には理不尽なほど厳しいルールに感じる。ご興味の向きはググって頂ければ、 この機能に関する知見や苦言がたくさんヒットするので参考にして頂ければと。

GUIクライアント

MacではSequel Proを愛用しているので、同様の GUIクライアントがほしいところ。通常の用途ではなく、PowerDNSのストレージとして 使用する想定の為、なおさら。
取り急ぎ、aptからも導入できる純正クライアントをインストールしとく。

1
sudo apt install mysql-workbench

機能が多すぎて、その一方でテーブルビューがわかりやすくなくて、正直使いづらい。
ググったらでてきた以下のページをみると、

Top 10 MySQL GUI Tools

HeidiSQLなるWindowsむけのツールをwineで動かすのも悪くないかもと思った。
Workbenchを使い続けることに我慢できなくなったら、挑戦するかも。

2017/11/14追記
その後、HeidiSQLを導入した。
XubuntuでHeidiSQL

FreeBSDでUserminをセットアップ

追記(2018/10/02)
リバースプロキシを併用した新しい手順の記事もあり。

ユーザー自身にパスワードを設定してもらう為に、FreeBSDサーバに Userminをセットアップした。

最初はパスワード変更ツールをPHPで書いてて、動くものが一旦は出来たのだが、Apacheの 実行ユーザー(FreeBSDではwww)をsudoerに加えてpwコマンドのみ実行を許す実装しか思いつかず (もちろん、手間をかければなくはないんだけど)、このままでは危険と判断した。 PHPにはpecl-pamというPECLモジュールもあるが、こちらも 本質的に同様の問題を抱えており、これを利用した実装が許される状況は 基本的にはない のでは ないかと思われる。w

Usermin自体はrootで実行されるが(パスワードの変更を行う為に、そうせざるを得ないのだが)、 パスワード変更機能のみをroot権限で実行する方がまだマシと判断した。

以下、実際の手順。
全て、suした後にroot権限で。

パッケージインストール

1
2
pkg install usermin
sysrc usermin_enable="YES"

セットアップスクリプト

1
2
cd /usr/local/lib/usermin
./setup.sh

対話形式で設問に回答すると、 /usr/local/etc/usermin が作成される。

設定ファイルを編集

1
2
cd /usr/local/etc/usermin
vi miniserv.conf

以下の項目は修正必須。

  • 何故かSSLオフがデフォルトだが、利用目的と矛盾するんじゃないの?
  • SSL3どころかSSL2も許可できるようになってて、さすがにデフォルトではオフになってるが、 今後オンにすることはあり得ないのでは?w
  • rootの接続は当然拒否すべき。デフォルトでそうなっていないのはどうなのよ?

以下、実行。

1
echo 'user: procmail changepass' > webmin.acl
  • デフォルトで非常にたくさんの設定が行える様に設定されているが、 一般ユーザーに開放すると危険な設定項目が満載。最低限のものにするべきではないか?
  • procmailが含まれているのは、ユーザー自身がメール転送の設定を行う想定で。 procmailを使用していないなら、当然この項目も削除していい。

証明書更新

Let’s Encryptによる example.com というコモンネームの証明書があると仮定して。
以下、実行。

1
2
mv miniserv.pem miniserv.pem.org
cat /usr/local/etc/letsencrypt/live/example.com/fullchain.pem /usr/local/etc/letsencrypt/live/example.com/privkey.pem > miniserv.pem

また、Let’s Encryptを運用しているなら、通常はcertbot renewを含んだシェルスクリプト等、 何かしら証明書の自動更新を構築しているはず。
Userminはcertbotが生成した証明書をそのままでは利用できないので、certbot renewの実行後に 上記コマンド(証明書の結合)も実行し、なおかつUsermin自体を再起動する必要があるだろう。

起動

以下、実行。又はサーバをリブート。

1
service usermin start

以上。

NautilusをSMB3対応に

先日のXubuntuのセットアップに関するエントリーで、コマンドライン環境の 設定については「以下割愛」と手抜きしたがw、SMB3についてのことだけは 書いとく。この件を調べるのには、相当に時間を要したので。

XubuntuからWindows Server製品やSamba等、SMBプロトコルベースのファイル サーバに接続する際、デフォルトでは非常に古いプロトコル(確かNT1相当)を 使用する。
自分はNautilusを使ってるけど、標準のThunarでも事情は同じだったはず。

これらのファイルマネージャは、実はSambaのクライアントライブラリを使用して いる為、 /etc/samba/smb.conf を適切に設定することで最新のSMB3を使用する ことが可能。パフォーマンスやセキュリティが大幅に改善される。
/etc/samba/smb.conf の global 節の下に、以下追記。

GPD Pocket 現状の問題点

今のところ大きな問題はない。
小さな問題については、以下のとおり。

画面まわり

起動時に左90度回転するのは、問題なし。
Xubuntuのログインフォームも回転するが、ログイン後に正常になるので我慢の範疇。
画面が時々ちらつくのは、初期不良?ドライバの線もあると思ってて静観してるけど、 初期不良という情報もある。まだリリースされたばかりで情報が少ないこともあり、様子見。

ちらつきに関しては、そのうち動画を撮らなきゃいけないと思ってて。
iPhoneで動画撮るの、慣れてなくて。再現のタイミングにカメラを構えてないといけないし。

Wi-Fi

5GHz帯が安定しない気がする。気のせいかも。
大きな問題はないのだが、自宅では2.4GHz帯を使用可能なので、そちらを使うようにしている。

キーボード

変態キーボードだが、段々慣れてきている。w
頻繁にミスタイプするのは、 DelQ 。 あとは記号類を除けばブラインドタッチできてる。 句読点と音引きぐらいは打てるようになりたい。
Qは仕方ないとして、DelはBSに変えたいと思ってる。 CapsをCtrlに変更した手順の応用と思われるので、要調査。

結構、熱くなったときがあった。
ACアダプタを挿してたからかなーと思ってその時は外したが、 いつも熱くなるわけではないみたい。

ファンの音がわりと大きな気はする。これは慣れか。
今までMacにしてもThinkPadにしても、あまり音は大きくなかったので。

GPD Pocket セットアップ

ようやく GPD Pocket が届いた。いや、届くまで長いこと待たされたわw
届いたのはUbuntu版。最初からXubuntuにするつもりでUbuntu版を選んだので、 早速セットアップを始めるのである。

本稿、GPD Pocket向けに特別なことはあまりしておらず、単に、個人的なXubuntuの セットアップ手順をまとめたものに近い。
基本的には自分の為に書いている記事だけど、同じような環境を構築したい人の役には 立つかもしれない。

後々、同様の作業をする時にむけた整理を目的としている。
実際にセットアップした手順を起こしたものではあるが、必ずしもやった通りの順番に 書いてないし、試行錯誤しながら行った一部の作業に関しては抜けがあるかもしれない。
記述に誤りがあるときは、ご指摘いただけるとありがたいです。

画面の回転を修正

最初に驚いたのは、画面が左90度に回転してて、縦画面を横から見る様な体裁に なっていたこと。
幸いUbuntuには、画面の回転を行う機能がある。設定→ディスプレイから 時計回りを選択。

入力リソース

日本語追加。English削除。

Xubuntu化

1
sudo apt install xubuntu-desktop

ログアウト後、Xubuntuセッションにて再ログイン。

アップデート

1
2
3
sudo apt update
sudo apt upgrade
sudo apt install synaptic

「ソフトウェアとアップデート」で、「Ubuntuの新バージョンの通知」を 「すべての新バージョン」に変更。
17.04を適用。

オーバレイスクロールバー

オーバレイスクロールバーとかいうへんなのを止める。
この機能、誰得なんですか。

1
sudo apt remove overlay-scrollbar

フォルダ名日本語化をもとに戻す

この機能、誰得なんですか。

1
LANG=C xdg-user-dirs-gtk-update

名前解決関連の設定

/etc/network/interfaces に、内部用のネームサーバを含めた以下の記述を追記。
/etc/resolv.conf を直接修正はできない模様。めんどくさい。

/etc/nsswitch.conf で、以下修正。

Caps→Ctrl

Capsキーは、誤入力のリスクでしかない。
「セッションと起動」の「自動開始アプリケーション」に、以下追加。

1
/usr/bin/setxkbmap -option "ctrl:nocaps"

Dropbox

1
sudo apt install nautilus-dropbox

インストール後ログインし、以下実行。

1
2
3
4
5
6
7
8
cd ~
ln -s Dropbox/Documents .
ln -s Dropbox/Downloads .
ln -s Dropbox/Downloads ./ダウンロード #何故必要なのか不明
ln -s Dropbox/Music .
ln -s Dropbox/Pictures .
ln -s Dropbox/Movies ./Videos
ln -s Dropbox/Fonts ./.fonts

(2017/8/29 一部修正)

プリンター

MultiWriter 5750C XRCプリンタドライバ を取得、インストール。

Guake

1
sudo apt install guake

Guake Preferencesを開く。

Chromium

1
sudo apt install chromium-browser

Googleアカウントにログイン。
同期されてEvernoteリクッパーが追加されるので、ログイン。

NixNote2

1
sudo apt install nixnote2

ツール→Syncronize

  • Evernoteにログイン

編集→設定

  • 見え方
    Default Editor Font → Ricty Diminished Discord
  • ロケール
    日付 → yyyy-MM-dd

Viewnior

画像ブラウザ。標準のより軽いと思う。

1
sudo apt install viewnior

jpg,png,gif等の関連付けを変更。

Mikutter

Twitterクライアント。
色々試して、これに落ち着いた。

1
sudo apt install mikutter

Twitterにログイン。

ウィンドウマネージャー設定

「ウィンドウマネージャー」

詳細

  • 画面の境界にスナップする
    チェック外す。

「ウィンドウマネージャー(詳細)」

アクセシビリティ

  • ウィンドウが画面端に移動された時自動的にタイル表示する
    チェック外す。
    設定項目名が日本語的に意味不明だが、ウィンドウを画面端にドラッグしたときに 最大化するへんな機能のこと。
    (Windowsにも同様の機能あり)非常に煩わしいので。

コンポジット処理

  • 移動中のウィンドウの透明度
    若干アップ
  • 大きさ変更中のウィンドウの透明度
    若干アップ

Mstdn

現状Xubuntu(Ubuntu)で利用できる、唯一のMastodon専用クライアント。
aptからの導入はできず、npmからインストールする。

1
2
3
4
5
6
7
8
9
echo "deb https://deb.nodesource.com/node_6.x xenial main" | sudo tee /etc/apt/sources.list.d/sublime-text.list
curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | sudo apt-key add -
sudo apt update
sudo apt install nodejs
sudo apt install npm
mkdir -p ~/repos/mstdn
cd ~/repos/mstdn
npm install mstdn
sudo ln -s ~/repos/mstdn/node_modules/mstdn/bin/cli.js /usr/local/bin/mstdn

1Password

Mac, Windows, iOS, Android, Xubuntu の全てで利用できるパスワードマネージャは、 現状これ以外にないと思われる。
とは言ってもUbuntu版はなくて、wineからWindows版を使用する。

1
sudo apt install wine-stable

Windows版 1Password をダウンロードしたら、.exeを/usr/bin/wineに関連付け。

1Passwordインストーラを一度起動して、終了する。
~/.wineができているので、

1
2
cd ~/.wine/drive_c/windows/Fonts
ln -s ~/.fonts/VL-Gothic-Regular.ttf .

~/.wine/user.reg に以下貼り付け。

以降は、以下参照。

Ubuntuで1Passwordを使ってみる

Sublime Text 3

1
2
3
4
5
wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add -
echo "deb https://download.sublimetext.com/ apt/stable/" | sudo tee /etc/apt/sources.list.d/sublime-text.list
sudo apt update
sudo apt install sublime-text
sudo apt install emacs-mozc

起動後、登録コード入力。一旦終了。
Dropbox上にあるパッケージを、以下の手順でまとめてインストールする。

1
2
3
cd ~/.config/sublime-text-3
mv Packages Packages.bak
ln -s ~/Dropbox/Sublime\ Text\s 3/Packages .

各種テキストファイルの拡張子で、関連付けを都度修正。

ウィスカーメニュー

Windowsのスタートメニュー的なやつを、こう呼ぶらしい。
設定→キーボードを開き、

  • アプリケーションショートカットキー
    Xfce4-popup-whiskermenyuをWindowsキーにアサイン。

以下、お気に入りから削除。

  • ターミナルエミュレーター
  • ヘルプ
  • Pidgin
  • LibreOffice Writer
  • LibreOffice Calc

以下、お気に入りに追加。

  • NixNote2
  • Mikutter
  • Sublime Text

お気に入りのアプリケーション

以下に変更。

  • Chromium
  • Guake
  • Nautilus

セッションと起動

自動起動アプリケーションに、以下追加。

  • /usr/bin/guake
  • /usr/bin/mikutter
  • /usr/local/bin/mstdn
  • /usr/bin/thunderbird

chef-solo 実行

コマンドライン環境の整備は、Chefで行った。
個人的な設定や社外秘も多く、個々のテーマについては、ググればよい資料はたくさんある。
以降の説明は割愛。

Hexoセットアップ

前々から始めようと思ってたブログを、ようやく今日から始める。
技術的な話題で割と分量があるものでも、今まではTwitterで連ツイしていたが、もういいかげんに ちゃんとしたブログを書こうと。そう思い立って、Markdown対応のブログエンジンとしては軽くて よさげだったHexoを導入した。
ちなみに当方、Markdownそのものもちょっとしか書いたことがない。このブログが三日坊主にならず、 更新を続けていくことが出来れば、Markdownに慣れる良い機会になるだろう。

今回は最初のエントリーだが、まずはHexoによる執筆環境の構築について。

VPSを用意したが…

Hexoの動作環境として、さくらインターネットさんからさくらのVPSをひとつ 借りた。(スペックは、1G/SSD)
さくらのVPSは既にいくつかインスタンスを所有しているが、どれも既にたくさん仕事をこなしていたので。

実は、Hexo以前にCrowiを検討していて、VPSを用意したのも Crowiの実行環境が必要だったから。ツール選考の際、「Markdownで書けるCMS」というところにばかり目が 行ってしまい、Crowiが記事の公開を目的としたツール ではない ということを知らなかった。(チーム内の Wiki等、閉じたグループでの情報共有を目的としたものらしく、記事の閲覧には事前にアカウント登録を行う必 要がある)
単に目的に合わなかったというだけで、Crowi自体はシンプルなよいツールだと思うので、引続きウォッチして いきたい。何かの機会に使うことがあるかも知れないしな。

Hexoの話に戻るが、Hexoはユーザーが記述したMarkdownの記事からHTMLを生成するツールで、Movable Type とよく似ている。
Movable Type(MT)にはとかく「重い」という印象があり(実際に運用した経験もあり)、当初、Hexoにも 同様の問題があるのではないかと懸念したが、DBMSも必要ない軽いツールである様だし、私が想定して いる用途ではパフォーマンスが問題になることはないだろうと思う。

VPSの用意はしたものの、そもそもその必要はあまりなかった。
また、本題ともあまり関係がないので、VPSにFreeBSDやnginxを構築する手順は、今回は割愛させて頂く。

Node.jsのセットアップ

今回のケースでは、Hexoの導入先は用意したVPSではなく、クライアントPCである。
Hexoはあくまで、MarkdownからHTMLを生成するツールとして使用し、アプリケーションサーバとしては 利用しない。クライアントPCで生成したHTMLはgitで管理し、VPSに対してはgitの機能を使用してデプロイ するものとする。

当方、最近はXubuntuなんかも使うけど、メインの環境はMac。 パッケージマネージャとしては、よく使われるHomebrew ではなく 、MacPortsを愛用している。
MacPortsによるNode.jsの環境構築に難しいところは全くない。

1
2
sudo port install nodejs6
sudo port install npm3

Homebrewには長いこと触ってないが、ほとんど同じ手順になると思われる。
注意が必要なのは、現行のHexo(3.3.8)は 最新のNode.js(8.x)では動作しないらしいということ。現状、安定版の6.x(及び、それに対応したnpm 3.x) を利用する必要がある。

Hexoのセットアップ

以下実行。

1
sudo npm install hexo-cli -g

記事リポジトリの作成

適当なディレクトリで、以下実行。
ディレクトリの名前 “blog” は任意のものでOK。 (以下、この名前でディレクトリを作成したものとして説明を続ける)

1
2
3
4
mkdir blog
cd blog
hexo init
npm install (8/23 19:30 追記:誤りを修正)

このままではAtomのフィードが生成できないので、blogディレクトリから出ずに、以下実行。

1
npm install hexo-generator-feed --save

_config.yml というファイルが出来ているはずなので、先頭の方を編集。(以下)

引続き hexo-generator-feed に対応する為に、 _config.yml の末尾に以下を追記。

更に、HexoのMarkdownでは、行末の改行(行末がスペース2文字で終わっていない改行)を勝手に<br> に置き換えてしまうという、一般的なMarkdownと互換性がない困った仕様がある。
この動作は設定ファイルで変更が可能なので、以下も記述しておく。

これらの編集を行ったblogディレクトリ全体をgitリポジトリとして登録し、GitHubにでもpushする。
このディレクトリに、適切な .gitignore ファイルが既にあるはずなので、通常はそのまま利用。

新しい記事を起こすとき

blogディレクトリの中で、以下実行。

1
2
cd blog
hexo new 記事の名前

記事の名前は、日本語可。
ここで指定した名前は、通常は記事の表示上のタイトル、URL、Markdownファイルの名前として使用される。
この例では、記事ディレクトリ内に _source/_posts/記事の名前.md_ というファイルが作成されるはずなので、 このファイルをMarkdown文書として編集すればよい。(編集の手順は後述)
source/_posts ディレクトリ内にファイルが作成される為、一見、同名の記事が作成できないように見えるが、 そんなことはない。同名の記事を作成しようとした場合、ファイル名やURLの末尾には連番が加えられるが、 記事タイトルは、過去に同名の記事があるかどうかに関わらずコマンドラインから指定したものになる。

Markdown書類の編集が終わったら、blogディレクトリ内で以下実行。

1
hexo generate

新しい記事を作成したり既存記事を修正した場合だけでなく、既存記事を削除した場合も、上記コマンドを実行 して変更を反映させる。
変更を反映したら変更をコミットし、設置先のVPS等でpull等を行って、変更を適用する。

Markdown文書の執筆環境

Macにも他のOSにも、Markdown文書を編集する方法は色々あるので、お好みの手順で。
以下、Sublime Text 3を利用した方法について述べる。

ほとんどのSublimeのユーザーはPackage Controlを既に導入済み と思われるが、もし導入していなかったらリンク先の指示に従って導入を行う。(手順は割愛)

Package Controlが既に導入されているなら、以下のパッケージをインストール。

OmniMarkupPreviewer

コマンド+オプション+o を押下することで、Webブラウザでプレビュー出来るようになる。(キーは変更可能)

上記キーを押下したらWebブラウザが404エラーを返す場合は、 OmniMarkupPreviewer.sublime-settings を 編集し(Macの場合は “Sublime Text” → “Preferences” → “OmniMarkupPreviewer” → “Settings - User” を開く)、以下を貼り付け。

TailingSpaces

行末のスペースを強調表示する様になる。(Markdownでは、行末にスペースを2文字置くことで改行を行うので)

もし、Sublimeの設定で _trim_trailing_white_space_on_save_ を有効にしている場合は、この機能との相性が よろしくない。
その場合、Markdown文書に対してのみ _trim_trailing_white_space_on_save_ 無効にする。
Markdown.sublime-settings を編集し (Macでは “Sublime Text” → “Preferences” → “Settings - Syntax Specific” を開く)、以下を貼り付け。

以上。
それでは、ナイスなHexoライフを!>各位