paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

アルティメット ラズパイ ホームサーバを構築する 1

Hackers Newsというサイトをよく見るんですが、面白いサイトを見つけたので紹介します。

http://www.instructables.com/id/Ultimate-Pi-Based-Home-Server/

DIY的なスキルを学べる学習サイトの様なんですが、ラズパイの項目があって触ってみたいと思ったのでやってみることにしました。

ラズベリーパイNASを作ってみようということで、ちょうど自宅にもNASが欲しかったのでサイトを参考に構築します。
最近ではNASなんかDockerやAnsible等で一撃で作成できそうですが、コマンドの学習も兼ねてやっていきます。

アルティメット…いい響きですねえ

作業ログ等で長くなりそうなので3回位に分割します。

ルール

  1. 基本的にサイトの手順通り作る
  2. パッケージが古くて入手できないものは最新版で代替する
  3. 他の参考サイトも見てOK

買い物

実は去年やろうと思って秋葉原で買ってきて、やっと開けました。

  • Raspberry pi3 スターターキット
    • 以下のセットです
      • 本体
      • ケース
      • HDMIケーブル
      • SDカード 8GB (raspbianインストール済み)
  • HDD 2.5inch 1TB
  • HDD 2.5inch アルミケース
  • ヒートシンク
  • HDMI変換ケーブル
    • 余りディスプレイが昔の4:3の奴しかないのでVGA変換できるよう買いました。初めしか使わないけど
  • SDカード16GB
    • 画面に写ってませんが一応予備に(使うことになりましたが)

f:id:paloma69:20180326150534j:plain

レシートをなくしてしまったのですが、全部で1,6000〜7,000円くらいだったと思います。

Step 1: 計画

機器選定と言ったところです。

ハードは上記の通り、

OSですが、サイトではServer Core for Raspberry PiというRasbianベースのTurnKey Linux OSで作るみたいです。
公式を確認したところ2012年でメンテナンスが止まっているようなので、スターターキットについてきたRaspianでつくります。

→ インストール後にディスク拡張したら起動しなくなってしまったので予備のSDカードに新規インストールします。

Step 2: 特徴

本サーバは以下のパッケージをインストールします。

  • Webmin Admin Interface
  • Shell In A Box
  • Samba Windows File Server
  • ownCloud
  • Transmission BitTorrent WebUI
  • Apache Webserver
  • PHP5
  • MySQL Database
  • no-ip Sync Client

自宅、外部から接続できるNASってところですかね。
で、管理コンソールも充実してると。
あとすごく小さい。

Step 3: ハードウェアセットアップ

とりあえず本体側をつくるためセットアップ。
ちっちゃい。

f:id:paloma69:20180326150637j:plain

なんとなくヒートシンク装着

f:id:paloma69:20180326150656j:plain

ケースは公式の白

f:id:paloma69:20180326150714j:plain

SDカードはここから

f:id:paloma69:20180326150728j:plain

Step 4: 始める前に

筆者の構築メモがあるようですが、私の環境ではリンク確認できなかったのでスキップします。

Step 5: iso書き込み

windowsの焼きこみツールで作業していますが、私のマシンはUbuntuなのでddで焼きます。
SDカードは/dev/sddで認識されました。

公式インストールガイド参照
https://www.raspberrypi.org/documentation/installation/installing-images/linux.md

2018年3月更新の最新版です。

masashi@PC-ubuntu:~/ダウンロード$ sudo dd bs=4M if=2018-03-13-raspbian-stretch-lite.img of=/dev/sdd conv=sync

Step 6: OSインストール

  • minimalイメージを落としたのですが、起動時に特にインストーラは走らずOSが動きました。そのまま進めちゃいます。
  • LAN繋いでsshd起動してsshから操作します。
  • ルータからDHCPでアドレスもらえるのでip設定はなし。
  • ISPのレンタルルータですが、リース期間は無期限で設定されている様です
    • 不便はないのでいじってません
  • 家のNW環境整理は追々...

ファイルシステムはこんな感じ

pi@raspberrypi:~ $ df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root       15240524 1072864  13516064   8% /
devtmpfs          470180       0    470180   0% /dev
tmpfs             474788       0    474788   0% /dev/shm
tmpfs             474788    6304    468484   2% /run
tmpfs               5120       4      5116   1% /run/lock
tmpfs             474788       0    474788   0% /sys/fs/cgroup
/dev/mmcblk0p1     42131   21470     20661  51% /boot
tmpfs              94956       0     94956   0% /run/user/1000

一応パッケージアップデートしておきます。

pi@raspberrypi:~ $ sudo apt-get update ; sudo apt-get upgrade

今回はこれまで。
次回からパッケージインストールしていきます。

続く

Automate the Boring Stuff with Python完走しました

「退屈なことはPythonにやらせよう」の英語版が無料で読めるので半年ほどかけて完走しました。

Automate the Boring Stuff with Python

去年の10月から読み始めたので6ヶ月かかりました。
途中で別の本も買いつつだったので一気読みできたわけじゃないけどとりあえず完読できました。

このブログでも勉強ログを書いていたんですが、途中でローカルのWikiに書くことにしたので中途半端になってしまいましたね。
でも一応ノンプログラマー向けだけあって読みやすかったです。

読みやすかった点

  • 章毎に機能説明が分かれている
    • 各章で別々にPythonの機能を紹介しており気になった章から読めました 。
  • 章の依存関係がない
    • 上の項目と被りますがどの章から読んでも問題ないので、理解しにくい部分は飛ばして気になる章から読むことができました。
      関係がある部分はこの章読んでね、と注釈があるので前の章を読みなおして進めることができました。
  • 関数に頼っていない
    • プログラミングは関数作ってなんぼだとは思いますが、やっぱり難しくて、私もそうですが初学者だとなかなか理解しにくいと思います。
      プログラミング本って関数を作る章があって以後はそれに追記してアプリを作るパターンって多くないですか?(主要機能でありますが)
      この本は広い範囲でpythonで出来る事を紹介してくれており、章をまたいだら別のコードになるので各章の機能説明が分かりやすかったです。
      もちろん関数の章もありますので読み直します!

気に入った章

  • Chapter 18 – Controlling the Keyboard and Mouse with GUI
    • 画面操作を自動でやる章です。
      ディスプレイの座標さえ分かれば自動化できちゃいます。
      とりあえずログインフォームや勤務表作成(うちはWeb化済)を自動化してみたいと思います。
    • 本当はWeb系の操作はSelenium等コマンドでかっこ良く作りたいです。
  • Chapter 11 – Web Scraping
    • スクレイピングはプログラミングに興味を持った分野なので基本から学べて良かったです。
      大したものじゃないけど一個作りました。

paloma69.hatenablog.com

  • Chapter 12 – Working with Excel Spreadsheets
    • 私は今SIerのネットワーク屋なので、Excelの資料が跋扈しています。
      Excelを脱却していく、というのも個人ではなかなか難しいので、pythonでパパっと処理したいと思います。

初めて完走出来たプログラミング本でした

初めてプログラミングの本を完走できたので、この勢いでもっと本を読み進めたいと思います。
今回読んだのは英語版で訳しにくいところもあったので読み直しつつ頑張ります。
でもインフラ屋としてはLinuxももっと勉強したいので、バランスよく読んでいきたいですね。

今はこれ読んでます。
図解で本当にわかりやすいです。

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

DokuwikiにMarkdownプラグインをインストールする

以前Dokuwikiをインスールしましたが、整形記法?っていうんですかね。
Dokuwiki独自の記法で書きづらかったりします。

私はMarkdownを使うことが多いのでMarkdownプラグインをインストールしてみます。

プラグイン

とりあえず公式を検索して出てきたこれにします。

plugin:markdowku [DokuWiki]

インストール

やることは簡単で

  1. プラグイン入手
  2. 解凍してpluginディレクトリに移動
  3. インストールOK!

でできます。

プラグインインストール

コンテナに入ってwgetで入手します。

masashi@PC-ubuntu:~$ lxc exec ubuntu16 -- /bin/bash
root@ubuntu16:~# 
root@ubuntu16:~# pwd
/root
root@ubuntu16:~# 
root@ubuntu16:~# 
root@ubuntu16:~# wget
wget: missing URL
Usage: wget [OPTION]... [URL]...

Try `wget --help' for more options.
root@ubuntu16:~# 
root@ubuntu16:~# wget https://komkon2.de/markdowku/markdowku.tgz
--2018-02-22 03:42:11--  https://komkon2.de/markdowku/markdowku.tgz
Resolving komkon2.de (komkon2.de)... 217.197.80.132, 2001:bf0:c000:a::2:132
Connecting to komkon2.de (komkon2.de)|217.197.80.132|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6818 (6.7K) [application/x-gzip]
Saving to: ‘markdowku.tgz’

markdowku.tgz       100%[===================>]   6.66K  --.-KB/s    in 0.001s  

2018-02-22 03:42:18 (6.82 MB/s) - ‘markdowku.tgz’ saved [6818/6818]

root@ubuntu16:~# 
root@ubuntu16:~# ls -l markdowku.tgz 
-rw-r--r-- 1 root root 6818 Feb 19  2017 markdowku.tgz

解凍して移動

  • 解凍
root@ubuntu16:~# tar xvf markdowku.tgz 
markdowku/
markdowku/License.text
markdowku/syntax/
markdowku/syntax/imagesreference.php
markdowku/syntax/ulists.php
markdowku/syntax/italicunderline.php
markdowku/syntax/boldasterisk.php
markdowku/syntax/codespans2.php
markdowku/syntax/references.php
markdowku/syntax/headersetext.php
markdowku/syntax/anchorsreference.php
markdowku/syntax/codespans4.php
markdowku/syntax/anchorsinline.php
markdowku/syntax/olists.php
markdowku/syntax/codespans3.php
markdowku/syntax/linebreak.php
markdowku/syntax/hr.php
markdowku/syntax/githubcodeblocks.php
markdowku/syntax/codespans1.php
markdowku/syntax/codeblocks.php
markdowku/syntax/italicasterisk.php
markdowku/syntax/imagesinline.php
markdowku/syntax/autolinks.php
markdowku/syntax/blockquotes.php
markdowku/syntax/codespans5.php
markdowku/syntax/headeratx.php
markdowku/syntax/escapespecialchars.php
markdowku/plugin.info.txt
root@ubuntu16:~# 
root@ubuntu16:~# 
root@ubuntu16:~# ls -ld markdowku
drwxrwxr-x 3 ubuntu ubuntu 4096 Feb 19  2017 markdowku
root@ubuntu16:~# mv markdowku /var/lib/dokuwiki/lib/plugins/
root@ubuntu16:~# 
root@ubuntu16:~# ls /var/lib/dokuwiki/lib/plugins
acl         authad     authpgsql  index.html  remote.php    syntax.php
action.php  authldap   authplain  info        revert        usermanager
admin.php   authmysql  config     markdowku   safefnrecode
auth.php    authpdo    extension  popularity  styling

移動できました。
あとは特に再起動しなくても使えるようになっているはずです。

確認

(実はまだ何も書けてないっていう)

f:id:paloma69:20180222125150p:plain

ちゃんとプレビュー見えてますね。

保存!

f:id:paloma69:20180222125234p:plain

OKです。
とりあえず動きそうなのでこれでmarkdownで書けますね。

一応デフォルトの記法も使えるみたいです。
でもこっちは使わなそう...

f:id:paloma69:20180222125540p:plain

LXDでローカルPCにDokuwikiを立てる(Ubuntu16.04+nginx+php7)

いろいろ業界の勉強してると技術ログを残したいものですが、ブログに書き続けるのも結構辛いものがあります。
昔のやつが埋まっちゃったりとか、一々検索もめんどくさいですからね。

というわけでまとめがしやすいようにローカルPCにDokuwikiを立ててみました。

今のメインPCはUbuntuなのでコンテナ(LXD)で立ててみたいと思います。
コンテナは自分の環境を汚さずにいろいろ立てられるので好きです。

別にDockerでいいじゃんって思ったけどLXDの方がDockerより自由に立てられそうなので、LXDで作ることにしました。

また、Wikiサイトはこの記事を読んでDokuwikiにしました。

qiita.com

WikiOSSはたくさんありますが、勉強のまとめだけなので、さくっとこいつを作りたいと思います。

LXDのインストール

masashi@PC-ubuntu: ~$ sudo apt-get install lxd

インストール後は一回ログアウトします。

再ログイン後、バージョン確認

masashi@PC-ubuntu: ~$ lxd --version
2.0.11

LXDの初期化

sudoつけないとエラーが出ました。
bridgeが作れないのか。

/usr/sbin/dpkg-reconfigure は root で実行する必要があります
error: Failed to configure the bridge

とりあえず設定は全部デフォルトにします。

masashi@PC-ubuntu: ~$ sudo lxd init 
Do you want to configure a new storage pool (yes/no) [default=yes]
Name of the storage backend to use (dir or zfs) [default=dir]: 
Would you like LXD to be available over the network (yes/no) [default=no] 
Do you want to configure the LXD bridge (yes/no) [default=yes]
Warning: Stopping lxd.service, but it can still be activated by:
  lxd.socket

このあとGUIが出ていろいろ設定するんですが、スクショを撮り忘れました。 これも全部デフォルトです。

下記のメッセージがでて初期化完了です。

LXD has been successfully configured.

コンテナイメージ取得

masashi@PC-ubuntu: ~$ lxc launch ubuntu:16.04 ubuntu16
クライアント証明書を生成します。1分ぐらいかかります...
初めて LXD を使う場合、sudo lxd init と実行する必要があります
初めてコンテナを起動するには、"lxc launch ubuntu:16.04" と実行してみてくだ
さい。

ubuntu16 を作成中

()

コンテナの確認

コンテナのNWは10.94.47.0/24のようです。
インストール時のGUIで聞かれた気がする。

masashi@PC-ubuntu: ~$ lxc list
+----------+---------+---------------------+------+------------+-----------+
|   NAME   |  STATE  |        IPV4         | IPV6 |    TYPE    | SNAPSHOTS |
+----------+---------+---------------------+------+------------+-----------+
| ubuntu16 | RUNNING | 10.94.47.134 (eth0) |      | PERSISTENT | 0         |
+----------+---------+---------------------+------+------------+-----------+

ブリッジの確認。
ちゃんと出来てますね。
(ローカルIPががっつり出ちゃうけどまあいいか)

masashi@PC-ubuntu: ~$ ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 6c:62:6d:e9:65:56 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.10/24 brd 192.168.0.255 scope global dynamic enp3s0
       valid_lft 2481sec preferred_lft 2481sec
    inet6 fe80::a3b9:45e0:316a:2753/64 scope link 
       valid_lft forever preferred_lft forever
4: lxdbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether fe:2c:4a:3d:4b:fa brd ff:ff:ff:ff:ff:ff
    inet 10.94.47.1/24 scope global lxdbr0
       valid_lft forever preferred_lft forever
    inet6 fe80::c071:faff:feb8:a94c/64 scope link 
       valid_lft forever preferred_lft forever
6: veth5YLIQG@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master lxdbr0 state UP group default qlen 1000
    link/ether fe:2c:4a:3d:4b:fa brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::fc2c:4aff:fe3d:4bfa/64 scope link 
       valid_lft forever preferred_lft forever

コンテナに入ってみます

この辺はDockerと同じですね。

masashi@PC-ubuntu: ~$ lxc exec ubuntu16 -- /bin/bash
root@ubuntu16:~# 

プロンプトが変わりました。

バージョン確認。
ホストOSと同じです。

root@ubuntu16:~# cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.3 LTS"

パッケージアップデートします。

root@ubuntu16:~# apt-get update ; apt-get upgrade

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

公式ドキュメントに沿ってインストール

root@ubuntu16:~# apt-get install php7.0
root@ubuntu16:~# apt-get install php7.0-mbstring
root@ubuntu16:~# apt-get install php7.0-xml

Apacheはなんとなく触れるので今回はnginxでやってみます。

root@ubuntu16:~# apt-get install nginx

Dokuwikiを取得

root@ubuntu16:~# wget https://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz

解凍

root@ubuntu16:~# tar xvf dokuwiki-stable.tgz 

ディレクトリ移動
私は/var/lib配下に入れるのが好きなのでここに移動します。
ドキュメントルートはどこがベストプラクティスなんですかねえ。

root@ubuntu16:~# mv dokuwiki-2017-02-19e /var/lib/dokuwiki

バックアップとって設定ファイル書き換えます。

root@ubuntu16:~# cp -i /etc/nginx/sites-available/default{,.bk}
root@ubuntu16:~# ls -l /etc/nginx/sites-available/
total 8
-rw-r--r-- 1 root root 2074 Feb 11  2017 default
-rw-r--r-- 1 root root 2074 Feb  7 14:58 default.bk

こんな感じ。
ローカルだしまだnginx慣れてないのでhttpでいいです。

root@ubuntu16:~# cat /etc/nginx/sites-available/default
#server {
#    listen               80;
#    listen                   [::]:80;
#    server_name          wiki.domain.example;
#    return 301 https://$server_name$request_uri;
#}
 
server {
    #listen [::]:443 ssl;
    listen 80;
 
    #server_name localhost;
 
    # Maximum file upload size is 4MB - change accordingly if needed
    client_max_body_size 4M;
    client_body_buffer_size 128k;
 
    root /var/lib/dokuwiki;
    index doku.php;
    
    #Remember to comment the below out when you're installing, and uncomment it when done.
    location ~ /(data/|conf/|bin/|inc/|install.php) { deny all; }

#   Uncomment this prevents images being displayed ! 
#    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
#        expires 31536000s;
#        add_header Pragma "public";
#        add_header Cache-Control "max-age=31536000, public, must-revalidate, proxy-revalidate";
#        log_not_found off;
#    }
 
    location / { try_files $uri $uri/ @dokuwiki; }
 
    location @dokuwiki {
        # rewrites "doku.php/" out of the URLs if you set the userewrite setting to .htaccess in dokuwiki config page
        rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last;
        rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last;
        rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last;
        rewrite ^/(.*) /doku.php?id=$1&$args last;
    }
 
    location ~ \.php$ {
        try_files $uri $uri/ /doku.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
        fastcgi_param REDIRECT_STATUS 200;
    fastcgi_index doku.php;
        #fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_pass unix:run/php/php7.0-fpm.sock;
    }
}

サービス起動

root@ubuntu16:~# systemctl start nginx

httpが上がりました。ssh使わないし閉じちゃってもいいかも。

root@ubuntu16:~# ss -ltn
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128          *:80                       *:*                  
LISTEN     0      128          *:22                       *:*                  
LISTEN     0      128         :::22                      :::*    

所有ユーザ変更を忘れていました。

root@ubuntu16:~# chown -R www-data:www-data /var/lib/dokuwiki

php-fpmとnginxを再起動。
php-fpmが何者かよくわかってないけどFastCGI実装の一つだそう。

root@ubuntu16:~# systemctl restart php7.0-fpm

root@ubuntu16:~# systemctl restart nginx

ローカルでアクセスしてみます。

root@ubuntu16:~# curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.10.3 (Ubuntu)
Date: Mon, 12 Feb 2018 09:45:31 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Set-Cookie: DokuWiki=8mbt5hbngnkj4hp92d6l7mlnp1; path=/; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
X-UA-Compatible: IE=edge,chrome=1

大丈夫そうなのでホストからも確認。

masashi@PC-ubuntu:~$ curl -I 10.94.47.134
HTTP/1.1 200 OK
Server: nginx/1.10.3 (Ubuntu)
Date: Mon, 12 Feb 2018 09:46:29 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Set-Cookie: DokuWiki=7d9kukc20pv85djjrk0imq9s64; path=/; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
X-UA-Compatible: IE=edge,chrome=1

OKですね。
ではブラウザから。

f:id:paloma69:20180212191550p:plain

できました!

編集してみる

文章書いてみます。

f:id:paloma69:20180212191600p:plain

セーブして...

f:id:paloma69:20180212191610p:plain

ページが作れました!
Dokuwikiの使い方含め技術ログもここに書きためていこう思います。

セキュリティ周りの設定がガバガバな気がしますが、とりあえず動いたのでOKです。
細かいのはこれからチューニングしていきます。(できたら)

参考サイト

公式ドキュメントはphp5系なのでこちらを参考に7系で動かしました。

Nginx・PHP7.0・Ubuntu14.04でphpinfoを表示させる - Qiita

ていうかqiitaに書きためとけばいい気がしてきた...

ワンライナーシェル芸旗揚げゲーム

最近シェル芸botで絵文字を使ったシェル芸が流行りのようなので私もちょっとやってみました。

f:id:paloma69:20180209001916p:plain

ワンライナー旗揚げゲーム書いてみました

for a in {1..20} ; do echo -e "\U269"{0,1}{あげ,さげ}{て,ないで,ない,る} | tr " " "\n" | shuf | head -1 ; done
  • 結果
    • メインPCで実行したので名前がガッツリ出ちゃってますがお気になさらず
    • ubuntu16.04 LTS Desktopです
masashi@PC-ubuntu:~$ for a in {1..20} ; do echo -e "\U269"{0,1}{あげ,さげ}{て,ないで,ない,る} | tr " " "\n" | shuf | head -1 ; done
⚑さげて
⚐さげて
⚐あげて
⚐さげる
⚐あげる
⚑あげないで
⚐あげる
⚐あげる
⚑あげて
⚐さげる
⚑あげて
⚐さげる
⚐あげないで
⚐さげる
⚑あげない
⚑さげる
⚐あげないで
⚐あげる
⚐あげない
⚐あげない

色に偏りがありますが、まあいいでしょう。
ブレース展開ってあまり使ったことがなかったのですがこの用途にハマりそうだったので使ってみました。

masashi@PC-ubuntu:~$ echo -e "\U269"{0,1}{あげ,さげ}{て,ないで,ない,る}
⚐あげて ⚐あげないで ⚐あげない ⚐あげる ⚐さげて ⚐さげないで ⚐さげない ⚐さげる ⚑あげて ⚑あげないで ⚑あげない ⚑あげる ⚑さげて ⚑さげないで ⚑さげない ⚑さげる

いい感じでパターンができました。

あとはシェル芸のお作法的な感じで改行コードへの変換とシャッフル+1行だけの出力でランダム出力の完成です。
あまり回すのも何なのでとりあえず20回のループにしています。

これで出力はできたので、あとはsleepを挟めば旗揚げゲームもできちゃいます。
(コンソール見ながら一人でやってるとやばい絵面になりそうですが)

ちなみにシェル芸botも対応してくれました。

f:id:paloma69:20180209002758p:plain

シェルを書きながら出力を見ていたらなんだかSFCクレヨンしんちゃん(1作目)の旗揚げゲームを思い出しました(笑)

ニセコに行ってきました

メイン機が壊れてしまったので、応急処置で予備のディスクにubuntuをインストールしました。 しばらくこれをメインで使います。

先週末の話ですが、北海道のニセコに行ってきました。
目的はスノーボードです。
いつも長野、新潟あたりですが、たまには足を延ばそうで北海道まで行ってきました。

高校の修学旅行で行ったきりで12~3年ぶりです。
しかも冬の北海道は初です。

本ブログでは勉強や技術ログを書きたいんですが、まとめが結構大変なのでたまには楽をします。

ニセコについて感じたこと

外国人が多い

北海道は外国人のイメージがあまりなかったのですが、ニセコはリゾート地として有名らしく目にするのはほとんど外国人でした。
店のスタッフさんも外国人が普通に働いてるし、飲み屋の人に聞いたところお客の8割は外国人だそうです。
商売柄なのか結構どこのスタッフさんも英語ペラペラでした。

雪質めっちゃいい

ここは普通にイメージつきますが北国あって本州と全然違います。
大げさですが目で雪の結晶が見えるレベル。

square端末が結構ある

スポーツショップは別ですが飲み屋とかはチェーン店がなくて個人経営のお店がほとんどでした。
外国のクラブチックな店もありました。
外国人が多いので当たり前なのですがどこでもカードが使えます。
小さいお店でもipadのレジにsquareでクレジットが使えました。

squareup.com

私も現金よりカード払いが多いので便利です。

店のお値段高め

海外のリゾート価格に合わせているらしくお値段は高め設定でした。
日本に遊びに来る層からしたら安いと思いますが我々にはちょっと厳し目かな。
貧乏旅行というわけではないですが、そんなにバカスカは使えません。

肝心のボードは

f:id:paloma69:20180203174553j:plain

例年1シーズン数回なのであまり上達することもなく、ひたすら滑ってる感じです。
非圧雪地帯を滑るのは面白いですね。転んでもいたくないし。
でもそこですっ転んでゴーグルが雪の中に埋もれて無くしてしまいました。 ちょっといいやつだったのでショックです。

快晴ではなかったですが、一応写真とっときました。 f:id:paloma69:20180203174443j:plain

なかなかの弾丸ツアーでした

月曜有給とって土~月の2泊3日でしたが、移動時間が多くニセコに滞在できたのは賞味30時間ほどだったんじゃないかと思います。
宿の喫煙所で会話した九州からのお客さんには短いねーって言われました。
北海道飯はゆっくり味わえなかったのでまた時間があれば行きたいと思います。

北海道のお酒

日本酒バルで飲んだ十一州(純米大吟醸)というお酒が美味しかったです。
店の説明にもありましたが、メロンの香りがしました。

十一州(じゅういっしゅう) ┃日本清酒(株):(有)酒匠こばやし

久しぶりの北海道はこんな感じでした。
せわしなかったですが楽しかったです。 また行きたいな。

録画サーバのディスク容量をmonitで監視して通知する

あけましておめでとうございます。

今年のおみくじは大吉だったのですが、年明け早々メインマシンのOSが上がらなくなってしまいました。
(ハング中に電源落として上がらなくなったのですが、多分セクタ不良)

なので一発目はタブレットからの投稿です。

昨年やっと録画サーバを構築したのですが、ディスクが少ないのですぐ一杯になってしまいます。
構築優先で全然ディスク設計を考慮しませんでした。

幸い今のところディスク満タンで取れてなかったという状況は無かったのですが、
そろそろ監視でもしようと思いツールを導入しました。

やりたいこと

  • 録画サーバの監視
  • 小規模なので簡易なツールでOK
  • スマホとかで確認できるもの

ということで監視ツールはmonitにしようと思います。

通知方法

slack通知など流行ってますが、とりあえず私はSlack使ったことないのでメール通知設定をします。
とりあえず出先で確認できるようになれば良いです。

インストール

これだけ

$ sudo aptitude install monit

監視設定

ディクス容量と通知ができればよいので最低限の設定にします。

ディスク監視だけなので間隔は5分でいいかな。

set daemon 300

メール設定

# MTA作るのめんどくさいのでGmailを利用
set mailserver smtp.gmail.com port 587 username "xxxxxx@gmail.com" password "xxxxxx" using tlsv1 with timeout 30 seconds

# メールフォーマットはデフォルトのまま
set mail-format {
  from:    monit@$HOST
  subject: monit alert --  $EVENT $SERVICE
  message: $EVENT Service $SERVICE
                Date:        $DATE
                Action:      $ACTION
                Host:        $HOST
                Description: $DESCRIPTION

           Your faithful employee,
           Monit
}

# 送信先
set alert xxxxxx@gmail.com

あとディスク容量だけ監視したいので、この設定を行います。
conf.d以下に別ファイルを作ります。

# ディスク使用率が90%を超えたらアラート
check device disk with path /dev/mapper/ubuntu--vg-root
 if inode usage > 90% then alert

テスト

テスト用にmonitプロセスを再起動してみます。

$ sudo systemctl restart monit

結果

f:id:paloma69:20180121125519p:plain

できました!
これでアラートが飛んでくるはずですね。

今後改良したいこと

  • NASを作って録画ファイルはそこに保存する
  • Slack通知に変更する
  • メールよりより気づけるはず

参考サイト

MonitでGmailをSMTPサーバとして使う - Qiita

ということで簡単に監視設定ができました!

本当はmonitインストールまでにaptitudeのインストールやら
bootディレクトリ容量フルの解決などしてたので準備が結構時間かかりました...。

参考サイト見つつ作りたいものは作れるようになってきましたが、お世話になりっぱなしです。
今年は自分からそういう発信をしていきたいですね。
なのでもっと勉強しないと!