静的サイトジェネレータHugoを試してみた

このサイトは編集をいつでもどこでも簡単にできるようにWordPressで作成していますが、内容を固定したサイトの場合には、WordPressで作成すると定期的にアップデートが必要となるので結構管理が面倒です。(それでも、WordPressはセキュリティアップデートは勝手にやってくれるので、だいぶ楽ですが)

また、プラグインやテーマもちょっとマイナーなものを入れると、本体のアップデートについていけず、結構悩むことになります。

で、最近知ったのが静的サイトジェネレータというもので、マークダウン言語で書いた記事をHTMLとCSSに変換してくれるものだそうです。HTMLとCSSだけでデータベースなどはないのでセキュリティ上の心配も少なくて済むようです。で、変換したHTMLとCSSをまるごとサーバ上にアップロードすればOK(実際には同期するのかもしれませんが)ということらしいです。

今回はその静的サイトジェネレータの中からHugoというのを試してみることにしました。

1.Hugoの環境構築

今回は諸般の事情から、素のUbuntu18.04LTS環境に導入してみます。Hugoで検索すると、WindowsかMacOSのものが大部分で、Linux環境の場合にはどういうわけか(探し方が悪いのか)古いものしか見つかりません。どうせなら最新版をインストールしたいところです。そこで参考にしたのは一つ目はこちらの記事です。何はともあれ、参考にしながら最新版をgithubからダウンロードしてインストールしてみます。

下記手順で素のUbuntu18.04LTSに対してアップデートとVirtualBoxのGuest Addtionsのインストールを行った後、Hugoのバイナリパッケージをインストールします。
※今後の再テストを短時間で行うため、VirtualBoxのディスクイメージのスナップショットも採取しています。

2.新しいサイトの作成

3.新しいページの作成

以下の方法で新しいページを作成します。

実際にやってみます。

として、contentディレクトリの下のpostディレクトリの下に記事を生成します。生成したら、自動生成されたファイルcontent/post/test-page.md を編集します。冒頭の draft: の行は削除します。(この行があると、記事が生成されません)

4.テーマをダウンロード

テーマをダウンロードします。ここでは試しに mainroad というのを使ってみます。

mainroadというテーマを使うために、config.toml に

を書き足します。

5.サイトを生成してみる

で、publicというディレクトリが生成されて中にデータが生成されます。

で組み込みサーバーが起動するようです。http://localhost:1313/ でインデックスページにアクセスできますが、かなり質素です(mainroadというテーマはこんなに質素じゃないはずなので要調査)。Ctrl+C で停止できます。

このまま、

として、もう1ページを作成、content/post/sample.md を編集します。冒頭の draft: の行は削除しつつ適当に内容を作成すると、自動的にブラウザで開いていた記事のリストが更新されます。

記事を一通り作成したら、publicディレクトリを丸ごとWebサーバにアップロードすることで、公開完了、ということみたいです。(実際には rsync などで同期を取る形で運用するのが楽なのだと思います)

6.参考になりそうなもの

Rock64をWiFi-APとしてもセットアップしてみました

hostapdを使って、WiFi-APとしてセットアップしました。

・・・が、なんのことはない、armbian-configの中に hotspot のメニューがあるので、それに従って設定するだけです。SSIDとパスワードはセットアップ後に /etc/hostapd.conf にて設定すれば完了です。
デフォルトでは AP としてのIPアドレスは172.24.1.1、DHCPで振られるIPは172.24.1.0/24のようです。

ROCK64用ケースを作ってみました

なんかケースばっかり作っている感じですが、先日Armbian Ubuntu 18.04を入れたROCK64 4GBにケースを作ってみました。もともと、Thinkiverseで見つけたケースを出力して入れていたのですが、HDMIに接続してXFCEデスクトップ環境のChrome上でYoutubeで動画を再生すると、小さなヒートシンクは付けてあるのですが70℃を超えていました。
これではいかん、ということでFANが付けられるケースを設計してみました。

FANは5Vのもので安いものがないか、ということで、秋月で100円で25mm角の5V動作のものを買ってきました。これに合わせて設計して出力したものが以下です。

右側が底板側で、穴の部分にはamazonで購入したインサートナットを圧入して使うように設計してみました。使用したインサートナットは下のような単純な形状のものです。

右下の2つが圧入前のもので、左が圧入後です。M2.5用のもので、ギザギザのある部分の外形ちょうどくらいの穴を開けておいて、長めのキャップスクリューの先に嵌めた状態でプラハンマーで叩いて挿入しました。

FANの取り付けはスナップフィットにして、下記のように追加の部品無しで取り付けられるようにしました。

上記の状態からROCK64のコネクタから5Vを取り出すようにコネクタをFANに付けて、完成としました。

写真ではLANケーブルは外した状態です。また、写っていないですが、反対側のUSBコネクタにはUSB3.0のUSBメモリと、キーボード/マウスのレシーバが刺さっています。その状態で同様にYoutubeを視聴してみたところ57℃くらいまで、XFCEデスクトップ環境で何もしない状態では45℃くらいまで下がりましたので、結構効果はあるものと思います。
電源は直結なので5Vが供給されている限り回りっぱなしです。25mmのFANということでかなりの高回転のようですが、径が小さいこともあり極端にうるさくはないようです。

3Dプリンタだと、このような適当なありものの部品に合わせてケースを作ってまとめられるので便利です。

ROCK64リモートデスクトップ環境

1年位前に買ったROCK64 4GBにArmbian Ubuntu18.04を入れてみました。別の端末からリモートデスクトップで接続できる環境が容易に構築できました。RAMが4GBあるので、目的によっては非常に便利に使えそうです。

1.Armbian Bionic for ROCK64のダウンロードとMicroSDへの書き込み

Armbianからダウンロードします。MicroSDへの書き込みはいつものようにディスクイメージライタで行いました。

2.初回電源投入

MicroSDを取り付け、LANに接続します。
接続先のIPアドレス確認のため電源投入の前に、fping でセグメント内で現在使われているIPアドレスを確認します。

ROCK64の電源を投入し、しばらく待って、再度fpingコマンドを実行、差分のところがROCK64のIPアドレスなので、そのアドレスに対して

としてログインします。初期パスワードは 1234 です。

※どうも、avahi-daemonが初めから動いているっぽいので、

で行けそうな気がします。

ログインに成功すると、現在のパスワード、新しいパスワードを確認してくるので入力します。
さらに、通常ユーザーの作成に移るので、適当に通常ユーザーを作成します。

一旦ログアウトして、再度作成したユーザーでログインし直します。

3.初期設定

で適当に初期設定を行います。

Systemの項目から以下のソフトウェアをインストールします。

  • Minimal Desktop
  • Default(ブラウザその他のインストール)
  • Lightdm(ログインマネージャ)

引き続きPersonalの項目から以下の項目を設定します。

  • TimezoneをAsia/Tokyoに設定
  • Languageはja_JP(UTF-8)

さらに、Softwareの項目からRDPを設定します。

4.リモートデスクトップクライアントから接続する

設定が終わると、別のマシンから Remmina(RDPクライアント)で接続するとリモートアクセスが可能となっています。すでに部分的ですが日本語化もされています。

「アプリケーション」⇒「Settings」⇒「言語サポート」で言語の設定を行いますが、この状態では英語のみインストールされていますので、「言語のインストールと削除」から日本語にチェックを入れて適用、キーボード入力に使うIMシステムにfcitxを選択します。その後、メニューとウインドウの言語で日本語を一番上に持ってきてから、「システム全体に適用」をクリックします。

地域フォーマットも同様に日本語を選択し、システム全体に適用します。

一旦ログアウトして、再度ログインして概ね完了です。
初めから Chromium ブラウザも入っているので、

5.ルートファイルシステムをUSBメモリに移動する

USBメモリを挿入した状態でarmbian-configを起動して、System settings で Install(Install on SATA, eMMC, NAND or USB)を選択、Boot from SDを実行すると、USBメモリにルートファイルシステムを移動してくれます。(実行する際にUSBメモリのパーティションを削除しておくと、自動でパーティション作成ツールが起動します)

USBメモリはこの記事で使ったSandisk UltraFit 3.1を使いましたが、システム移動後に

として1GBのファイルを作成してみたところ、所要時間は約10秒、107MB/sの速度が出ました。
まだ挙動がよくわからないところもありますが、速度面でも優位なのではないかと思います。

※Boot from SPIを実行するとSPIフラッシュにブートローダを書き込んで、SDカード無しで起動できるようになるのだと思いますが、戻し方を確認していないのでとりあえずbootはSDカードのままとしました。また、この作業は今回は最後にやりましたが、本来は最初にやっておいたほうがトータルの構築時間は短くて済むような気がします。

LinuxMint19にLTSpiceをインストールしてみる(2)

どうも、wineの最新版は、WineHQを公式ページからインストールするのが良さそうです。ですので、まずsynapticでwineで検索して、wine1.6、wine32など、関連しそうなパッケージを削除した後、

で不要と思われるパッケージを一掃して出直します。

公式ページの記載に従って、

とするのですが、最後のupdateで、

E: リポジトリ https://dl.winehq.org/wine-builds/ubuntu/sudo bionic Release には Release ファイルがありません。
N: このようなリポジトリから更新を安全に行うことができないので、デフォルトでは更新が無効になっています。
N: リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してください。

となってエラーになってしまいます。うーん、ローカル側の感じがしないので、どうしたものか。
後戻りしてしまいました。

LinuxMint19にLTSpiceをインストールしてみる(1)

【注意:Synapticに初めから出てくるのは古いバージョンの可能性があるので、wineとwine32を削除後、$ sudo apt-get autoremove とした後、現在違う方法でやり直しています。】

ちょっと回路シミュレーションをしてみたくなったのですが、できればLinuxでやりたい。でも、GUIで簡単にやりたい。そして、今動かすならLTSpiceでしょう、というところなのですが、残念ながら、LTSpiceはWindowsとMacOS X用しか用意されていない。・・・となれば、Wineでトライしてみます。

いつものようにSynapticパッケージマネージャを起動、「Wine」で検索するとでてくる「wine1.6」を選択して依存パッケージとともにインストールします。

引き続き、LTSpiceのWindows版をダウンロードして、ダウンロードしたファイルに実行属性を付けます。

引き続き、Wineで実行してみます。

ということで、エラーになってしまいました。LTSpiceが32bit版のためのようです。

として大量のライブラリをインストールしてから、改めてトライしてみます。

とすると、しばらく沈黙したあと、以下のようなインストーラのウインドウが表示されるのだが、

ご覧の通り、文字化けしている。検索するとよくある現象の模様。
こちらのページを見ると、winetricksというツールで解消できる模様。

で起動して、「Select the default wineprefix」⇒「Install a font」⇒「cjkfonts」であとは従っていくとインストールできる。途中、警告がいくつか出るが、実行中のWineプログラムが終了されるというもののようなので、はじめから何も実行していなければそのままOKでよいはず。

$ wine LTspiceXVII.exe

でインストーラが起動し、まだ一部文字化けはあるもののなんとかインストール、起動まではたどり着きました。

以下のあたりも参考になりそうです。https://forums.ubuntulinux.jp/viewtopic.php?pid=118386

 

NanoPi NEO2セットアップ(FriendlyCore編)

何回やってるんだという感じのNanoPi NEO2のセットアップです。

公式イメージが置いてある http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO2#Boot_from_TF のリンク先の Google Drive のURL https://drive.google.com/drive/folders/1w7eMluHWo3ezwKBdaJcDUcCtM9qVaaVv から「nanopi-neo2_friendlycore-xenial_4.14.52_20180628.img.zip」をダウンロードしてきて、イメージを展開、USBイメージライタでMicroSDカードに書き込みます。書き込んだMicroSDカードをNanoPi NEO2に挿入します。ローカルPCで

を電源投入前後で実行、増えたIPアドレスを調べます。(注:電源投入後の実行はしばらく待ってから行います)
調べたIPアドレスに対して、

として、パスワード「pi」でログインします。

でセットアップ。パスワードの変更、ロケール(ja_JP.UTF-8)の追加、タイムゾーンの変更(Asia/Tokyo)して、再起動。
再起動後、再度 ssh でログインして、

完了すると、以降は

でログインできるようになります。(ローカル側にも avahi-daemon が必要)

WindowsとLinuxで時計が狂うのを直す

昔から Linux と Windows のデュアルブートが可能な環境でOSを行き来すると、時計が大きくずれる現象が発生していました。これは Linux ではPCのハードウェア時計(RTC)が UTC(協定世界時)で動作しているのを前提としているのに対し、WindowsではRTCはローカルタイム(JST=日本標準時)で動作しているのを前提としており、それぞれのOSがNTPを利用して時刻修正を行って、それをRTCに反映していることが原因でした。

以前のバージョンのLinuxでは、 /etc/default/rcS に UTC=no と記載することにより、RTCの設定がローカルタイムであることを設定できたのですが、いつの頃からか /etc/default/rcS は存在しなくなっていました。

最近は Linux を使うことがほとんどで、それでもあまり困らなかったのですが、その修正方法がわかったのでメモしておきます。修正は以前と同様、Linux側で行います。使用するコマンドは timedatectl コマンドです。

ということで、最後の行にRTCがローカルタイムゾーンか否かの記載があります。で、

とするとこの設定を変更することができます。ところでこのコマンド、ハードウェア設定の変更に関わるものなのですが、root権限がなくても設定できてしまいます。(いいのかな?)

設定変更後に再度設定状況を読み出すと、

という感じで、警告が表示されます。

EzBook3 Pro用にUSBブートのLubuntuを作成

EzBook3 Proでいろんなこと(ちょっと危ないサイトへのアクセスを含む)ができるよう、USBメモリブートのLinux環境をつくります。

1)LubuntuをUEFIで起動できるようインストール

Lubuntu 18.04.1を別のマシンでUEFIで起動してUSBメモリにインストール。「ディスクを削除してLubuntuをインストール」を選択。パーティション作成時にESPパーティションが作られるのがポイント。

2)内蔵SSDを見えなくする

EzBookPro3に増設してあるmSATAのSSDを認識できないようカーネルに設定追加します。

インストール完了後は、内蔵HDDを見えないように設定変更します。作業としては、 /etc/default/grub を開いて、 「GRUB_CMDLINE_LINUX_DEFAULT」の起動時オプションに「libata.force=disable」を追加します。修正後は、

としてgrub.cfgファイルを自動生成させて反映させます。

ちなみに、「libata.force=disable」のところを、「libata.for=1:disable,3:disable」のようにすると、特定のSATAデバイスのみ無効化できます。指定する番号は dmesg を見ると、

と言うような箇所があり、このata1.00のデバイスなら1:disableを、ata2.00のデバイスなら2:disableを指定します。(注:このdmesgの例は EzBook3 Proのものではありません)

3)内蔵eMMCを見えなくする

/etc/rc.localとして以下の内容のファイルを作成します。

次に、/etc/systemd/system/rc-local.serviceとして以下の内容のファイルを作成します

起動時に自動実行するように設定します。

これで起動後ログインするとeMMCの内容が見えなくなりました。

4)言語サポートのインストール

言語設定で不足しているファイルをインストールさせます。

5)USBメモリへのアクセス高速化

USBメモリへのアクセス時刻の記録を停止してアクセスを減らすとともに、/tmpをtmpfsにより確保してUSBメモリへのアクセスを減らします。/etc/fstab をのもとからある行にnoatimeオプションを追加し、さらにtmpfsで始まる行を追加します。

追伸

で増設したSATAが見えなくなるっぽい。事前に sync したほうが良さそうだけど。

NanoPi NEO2でタイムラプス撮影

部屋を掃除していたらELECOMのWebカメラが出てきました。LinuxMintのマシンに挿してみたところ uvc カメラとして認識するようでしたので、NanoPi NEO2に挿してみたらこちらも認識しました。

なので、TimeLapse撮影ができないか、試してみました。
ググると Ubuntu でTimeLapseをやっている方は結構いるようで、基本的にはそちらに倣ってやってみました。

基本、NanoPi NEO2に合わせている以外はこちらのページのパクリです。

1.カメラ画像の連続キャプチャ

1枚単位での撮影には fswebcam を使うのが簡単なようです。

でインストールできます。で、連続撮影する場合には、1枚キャプチャするシェルスクリプトを書いて、cron で所定の時間毎に1枚キャプチャ、というのが簡単なようなのですが、NanoPi-NEO2のUbuntu-coreではcronはユーザーに開放されてないっぽいです。crontab -eとしても編集できないですし、ググってもシェルスクリプト内でループしてsleepで時間待ちせよ、みたいなことが書いてあります。

結局、以下のようなシェルスクリプトで連続撮影します。ファイル名は TimeLapse.sh として、ホームディレクトリの下に CaptureImage というディレクトリを作って、そこに置きました。

作成したスクリプトに実行権限を付けてやります。

で、実行すると、ザクザクと画像が溜まっていきます。

2.キャプチャした静止画の引取の準備

動画への変換はホスト側でやります。

ホスト側で

として、sshfsでnanopi側のホームディレクトリをローカルディレクトリにマウントして、これで引き取ります。
(今考えれば、sshfsでマウントしなくても scp でも良かった・・・)

3.画像の変換の準備

ローカル側でffmpegで変換しますが、motionをインストールするほうが楽だという情報があったので、そうしました。

4.画像の引取と変換

以下の手順で画像の引取と変換を行います。

これで TimeLapse ができましたが、静止画の保存サイズが大きいようです。
1分間で3〜4MB出力しているようなので、1週間で40GBくらいになってしまいます。ちょっと要対策ですね。