paloma blog

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

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

続き

パッケージをインストールしていきます。

Step7: Webminインストール

サイトではOSに初めから入っているようですが、ここでは新規インストールします

参考サイト Ubuntu 16.04 LTS : Webmin インストール : Server World

pi@raspberrypi:~ $ sudo apt-get -y install python apt-show-versions libapt-pkg-perl libauthen-pam-perl libio-pty-perl libnet-ssleay-perl 

pi@raspberrypi:~ $ curl -L -O http://www.webmin.com/download/deb/webmin-current.deb 
pi@raspberrypi:~ $ sudo dpkg -i webmin-current.deb

ポートもサイトと同じにします。
設定ファイルの中身は割愛。

pi@raspberrypi:~ $ sudo vi /etc/webmin/miniserv.conf 
pi@raspberrypi:~ $ sudo systemctl start webmin
pi@raspberrypi:~ $ 

あれ?10000であがってる…

pi@raspberrypi:~ $ 
pi@raspberrypi:~ $ ss -lnt
State      Recv-Q Send-Q                               Local Address:Port                                              Peer Address:Port              
LISTEN     0      128                                              *:10000                                                        *:*                  
LISTEN     0      128                                              *:22                                                           *:*                  
LISTEN     0      128                                             :::22                                                          :::*                  
pi@raspberrypi:~ $ 
pi@raspberrypi:~ $ sudo vi /etc/webmin/miniserv.conf 
pi@raspberrypi:~ $ 
pi@raspberrypi:~ $ curl -I localhost:10000
HTTP/1.0 200 Document follows
Server: MiniServ/1.881
Date: Sat, 24 Mar 2018 10:16:05 GMT
Content-type: text/html; Charset=iso-8859-1
Connection: close

pi@raspberrypi:~ $ curl -I localhost:12321
curl: (7) Failed to connect to localhost port 12321: Connection refused
pi@raspberrypi:~ $ 

再起動したら直りました。

pi@raspberrypi:~ $ ss -lnt
State      Recv-Q Send-Q                               Local Address:Port                                              Peer Address:Port              
LISTEN     0      128                                              *:22                                                           *:*                  
LISTEN     0      128                                              *:12321                                                        *:*                  
LISTEN     0      128                                             :::22                                                          :::*                  
pi@raspberrypi:~ $ 

ログインして言語を日本語にしました。
ユーザはshellと同じアカウントです。
ローカルIPが見えちゃってるがいいか。

f:id:paloma69:20180327210505p:plain

Step8: Shell in a Box インストール

  • メイン機からSSHするので使わないとは思いますが、倣ってインストールします。
  • リポジトリにあるようなのでapt-getでインストール
pi@raspberrypi:~ $ sudo apt-get install shellinabox
pi@raspberrypi:~ $ sudo cp -i /etc/default/shellinabox{,org}
pi@raspberrypi:~ $ 
pi@raspberrypi:~ $ sudo vi /etc/default/shellinabox 
pi@raspberrypi:~ $ 
pi@raspberrypi:~ $ 
pi@raspberrypi:~ $ sudo systemctl start shellinabox

pi@raspberrypi:~ $ ss -lnt
State      Recv-Q Send-Q                               Local Address:Port                                              Peer Address:Port              
LISTEN     0      128                                              *:4200                                                         *:*                  
LISTEN     0      128                                              *:22                                                           *:*                  
LISTEN     0      128                                              *:12321                                                        *:*                  
LISTEN     0      128                                             :::22                                                          :::*                  
pi@raspberrypi:~ $ 

こっちも再起動したらポート直りました。

pi@raspberrypi:~ $ sudo systemctl restart shellinabox
pi@raspberrypi:~ $ ss -lnt
State      Recv-Q Send-Q                               Local Address:Port                                              Peer Address:Port              
LISTEN     0      128                                              *:22                                                           *:*                  
LISTEN     0      128                                              *:12320                                                        *:*                  
LISTEN     0      128                                              *:12321                                                        *:*                  
LISTEN     0      128                                             :::22                                                          :::*                  
pi@raspberrypi:~ $ 

余り使いみちが浮かびませんが、ブラウザから出来ると何かと便利なのかな?

f:id:paloma69:20180327210545p:plain

Step9: 再起動

原文はHow To Rebootで再起動の仕方を覚えようという内容になっています。
今は再起動必要な対応もしていないのでスキップ。

Step10: サーバ名変更

ホスト名を変更します。

「raspberryNAS」とでもしますか。

サイトではnanoで変更していますが、私は使い慣れたviで変えます。

pi@raspberrypi:~ $ sudo vi /etc/hostname 
pi@raspberrypi:~ $ sudo cat /etc/hostname 
raspberryNAS

適用のため再起動します。(さっきのはここで使うのか)

20秒程度で復帰しました。早い!

Step11: HDDマウント

他で使っていたドライブを使用する場合の注意書きのようです。

NFTSのフォーマットはお作法があるようですね。

ディスク周りの操作ってあまりやったことない...
今回は新しいHDDなので気にしなくていいかな。

Step12: HDDマウント続き

装着!(しまった。床が汚い…) f:id:paloma69:20180327210036j:plain

マウントします。 webminではエラー吐いたのでコマンドでやっています。

f:id:paloma69:20180327211954p:plain

f:id:paloma69:20180327212021p:plain

ファイルシステムが悪いって言ってる?

コマンドで確認。
認識してます。

pi@raspberryNAS:~ $ dmesg | tail
[ 1061.782758] usb-storage 1-1.5:1.0: Quirks match for vid 152d pid 2329: 8020
[ 1061.782846] scsi host0: usb-storage 1-1.5:1.0
[ 1065.146056] scsi 0:0:0:0: Direct-Access     HGST HTS 721010A9E630     JB0O PQ: 0 ANSI: 2 CCS
[ 1065.148157] sd 0:0:0:0: [sda] 1953525168 512-byte logical blocks: (1.00 TB/932 GiB)
[ 1065.148718] sd 0:0:0:0: [sda] Write Protect is off
[ 1065.148733] sd 0:0:0:0: [sda] Mode Sense: 28 00 00 00
[ 1065.149248] sd 0:0:0:0: [sda] No Caching mode page found
[ 1065.149258] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 1065.169301] sd 0:0:0:0: Attached scsi generic sg0 type 0
[ 1065.820741] sd 0:0:0:0: [sda] Attached SCSI disk
pi@raspberryNAS:~ $ 

/media/serverhddを作成してここにマウントします。

pi@raspberryNAS:~ $ sudo mkdir /media/serverhdd

ファイルシステムを指定。
ファイルシステムはよくわからんのでext4でいいか。
パーティションは切らずにまるまる使います。

pi@raspberryNAS:~ $ sudo mkfs -t ext4 /dev/sda 
mke2fs 1.43.4 (31-Jan-2017)
Creating filesystem with 244190646 4k blocks and 61054976 inodes
Filesystem UUID: e4060527-833c-4e1d-848b-d3861ca4f34b
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
    102400000, 214990848

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (262144 blocks): 
done
Writing superblocks and filesystem accounting information: done     

マウントされました!

pi@raspberryNAS:~ $ df -T
Filesystem     Type     1K-blocks    Used Available Use% Mounted on
/dev/root      ext4      15240524 1252796  13336132   9% /
devtmpfs       devtmpfs    470180       0    470180   0% /dev
tmpfs          tmpfs       474788       0    474788   0% /dev/shm
tmpfs          tmpfs       474788    6332    468456   2% /run
tmpfs          tmpfs         5120       4      5116   1% /run/lock
tmpfs          tmpfs       474788       0    474788   0% /sys/fs/cgroup
/dev/mmcblk0p1 vfat         42131   21470     20661  51% /boot
tmpfs          tmpfs        94956       0     94956   0% /run/user/1000
/dev/sda       ext4     960381672   77852 911449308   1% /media/serverhdd

Step13: MySQLインストール

これもWebminから

パッケージがないのでインストール f:id:paloma69:20180327212133p:plain

なんか始まった f:id:paloma69:20180327212146p:plain

インストール完了!
管理画面がでました f:id:paloma69:20180327212202p:plain

Step14: MySQLにデータベース追加(owncloud)

新規データベースを作成を選択
名前以外デフォルトで作成 f:id:paloma69:20180327212337p:plain

owncloudデータベースができました。 f:id:paloma69:20180327212359p:plain

Step15: MySQLにユーザ追加

新規ユーザ作成選択

ユーザ名をowncloudで、
権限はスーパーユーザ以外を選択。
MAX Connectionを15に設定して作成 f:id:paloma69:20180327212457p:plain

できました。 f:id:paloma69:20180327212524p:plain

Step16: PHPインストール

これはコマンドで

サイトではshellinaboxからですが、こちらはsshターミナルからやります。

apt-get install php5 php-pear php5-mysql

5系か…まあいいか

入らない

pi@raspberryNAS:~ $sudo apt-get install php5 php-pear php5-mysql

Reading package lists... 0%

Reading package lists... 100%

Reading package lists... Done


Building dependency tree... 0%

Building dependency tree... 0%

Building dependency tree... 50%

Building dependency tree... 50%

Building dependency tree       


Reading state information... 0%

Reading state information... 0%

Reading state information... Done

Package php5 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'php5' has no installation candidate

調べてみるとDebian Stretchからphp5は廃止された模様。
どうするか。

とりあえずフォーラムを頼りにやってみる
https://www.raspberrypi.org/forums/viewtopic.php?t=195818

リポジトリ追加

pi@raspberryNAS:~ $ sudo vi /etc/apt/sources.list

deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi

pi@raspberryNAS:~ $ sudo apt-get install php5 php-pear php5-mysql
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package php5 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

Package php5-mysql is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'php5' has no installation candidate
E: Package 'php5-mysql' has no installation candidate
pi@raspberryNAS:~ $ 
pi@raspberryNAS:~ $ update-alternatives --set php /usr/bin/php5
update-alternatives: error: no alternatives for php
pi@raspberryNAS:~ $ 
pi@raspberryNAS:~ $ sudo apt-get install php5 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package php5 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'php5' has no installation candidate
pi@raspberryNAS:~ $ sudo vi /etc/apt/sources.list
pi@raspberryNAS:~ $ 
pi@raspberryNAS:~ $ sudo apt-get install php5 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package php5 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'php5' has no installation candidate
pi@raspberryNAS:~ $ 

update-alternativesがなんかエラー吐いてるし、入らない…
切り分けしてる時間ももったいないので、php7ですすめます。

pi@raspberryNAS:~ $ sudo apt-get install php php-pear php-mysql

pi@raspberryNAS:~ $ php --version
PHP 7.0.27-0+deb9u1 (cli) (built: Jan  5 2018 13:51:52) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.27-0+deb9u1, Copyright (c) 1999-2017, by Zend Technologies
pi@raspberryNAS:~ $ 

OK!

Step17: ownCloudインストール

これもwebminから。
aptからowncloudを選択してインストール f:id:paloma69:20180327213841p:plain

php5関係のエラーが出て失敗したのでowncloudの最新版をインストールします。 f:id:paloma69:20180327213907p:plain

参考サイト
Raspberry Pi 3 に ownCloud X をインストール | スモールサーバ開発部

pi@raspberryNAS:~ $ wget https://download.owncloud.org/community/owncloud-10.0.7.tar.bz2

pi@raspberryNAS:~ $ ls -l owncloud-10.0.7.tar.bz2 
-rw-r--r-- 1 pi pi 39395237 Feb 19 16:41 owncloud-10.0.7.tar.bz2

解凍

pi@raspberryNAS:~ $ tar xvf owncloud-10.0.7.tar.bz2 

pi@raspberryNAS:~ $ ls -ld owncloud
drwxr-xr-x 12 pi pi 4096 Mar 24 12:33 owncloud

展開されました。

Step18: ownCloudプレインストール

手順に沿ってディレクトリ作成

pi@raspberryNAS:~ $ cd /media/serverhdd/
pi@raspberryNAS:/media/serverhdd $ 
pi@raspberryNAS:/media/serverhdd $ sudo mkdir cloud
pi@raspberryNAS:/media/serverhdd $ sudo chmod 750 /media/serverhdd/cloud
pi@raspberryNAS:/media/serverhdd $ ls -ld cloud/
drwxr-x--- 2 root root 4096 Mar 24 12:37 cloud/

Step19: ownCloud設定

手順上ではこの時点でownCloudにアクセスできるみたいですが、私は途中で手順を変えたので軌道修正します。
ownCloudにアクセスできるようにします。

ディレクトリ移動&設定ファイル作成

pi@raspberryNAS:~ $ sudo mv owncloud /var/www/
pi@raspberryNAS:~ $ sudo chown -R www-data:www-data /var/www/owncloud
pi@raspberryNAS:~ $ sudo vi /etc/apache2/conf-available/owncloud.conf 

反映

pi@raspberryNAS:~ $ sudo a2enconf owncloud 
Enabling conf owncloud.
To activate the new configuration, you need to run:
  systemctl reload apache2

apache再起動

pi@raspberryNAS:~ $ sudo systemctl reload apache2 

キターーー!!!
けどエラーがいっぱい... f:id:paloma69:20180327214450p:plain

  • PHP module zip not installed.
  • PHP module intl not installed.
  • PHP module mb multibyte not installed.
  • PHP module GD not installed.
  • PHP module cURL not installed.
  • PHP modules have been installed, but they are still listed as missing?

モジュールがいろいろ足りないようなので入れていきます。

一応searchで確認
(1個ずつしましたがまとめて確認できるのかな?後で調べよう)

pi@raspberryNAS:~ $ sudo apt search php-zip
Sorting... Done
Full Text Search... Done
php-zip/stable 1:7.0+49 all
  Zip module for PHP [default]

php-zipstreamer/stable 1.0-1 all
  Stream zip files without i/o overhead

pi@raspberryNAS:~ $ sudo apt search php-intl
Sorting... Done
Full Text Search... Done
php-intl/stable 1:7.0+49 all
  Internationalisation module for PHP [default]

pi@raspberryNAS:~ $ sudo apt search php-mb
Sorting... Done
Full Text Search... Done
php-mbstring/stable 1:7.0+49 all
  MBSTRING module for PHP [default]

pi@raspberryNAS:~ $ sudo apt search php-gd
Sorting... Done
Full Text Search... Done
php-gd/stable 1:7.0+49 all
  GD module for PHP [default]

pi@raspberryNAS:~ $ sudo apt search php-curl
Sorting... Done
Full Text Search... Done
php-curl/stable 1:7.0+49 all
  CURL module for PHP [default]

インストール

pi@raspberryNAS:~ $ sudo apt-get install php-zip php-intl php-mbstring php-gd php-curl 

インストール終わったらapache再起動

キタ━━━━(゚∀゚)━━━━!! f:id:paloma69:20180327214724p:plain

アカウントを設定

  • 管理者
  • データ格納パス
  • データベース

Finish! f:id:paloma69:20180327214829p:plain

画面が変わりました。

パスワード入れて… f:id:paloma69:20180327214901p:plain

ログインできたよーーー! f:id:paloma69:20180327214932p:plain

長くなってしまったので今日はここまでにします。

次はアカウントやファイル共有の設定をやっていきます!

続く

アルティメット ラズパイ ホームサーバを構築する 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時間ほどだったんじゃないかと思います。
宿の喫煙所で会話した九州からのお客さんには短いねーって言われました。
北海道飯はゆっくり味わえなかったのでまた時間があれば行きたいと思います。

北海道のお酒

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

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

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