RubyとPythonをインストール

Ruby

takatoh@wplj $ sudo apt install ruby
takatoh@wplj $ ruby -v
ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu]

おお、2.3だ。

Python

takatoh@wplj $ sudo apt install python
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
python はすでに最新バージョン (2.7.11-1) です。
python は手動でインストールしたと設定されました。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 432 個。

あれ、入ってる?

takatoh@wplj $ python -V
Python 2.7.11+

入ってた。

Sambaでファイルサーバを構築

wplj にアクセス権フリーの共有ディレクトリを作る。
このへんのページが役に立った。

 cf. Samba でファイルサーバー構築 – 自宅サーバー Debian/Ubuntu
 cf. https://www.server-world.info/query?os=Ubuntu_16.04&p=samba

まずは Samba のインストール。

takatoh@wplj $ sudo apt install samba

これでインストールされるだけでなく、動き出すらしい。

takatoh@wplj $ ps ax | grep samba
 3821 pts/18   S+     0:00 grep --color=auto samba

あれ?動いてない?
共有ディレクトリを作成。

takatoh@wplj $ sudo mkdir /media/aysheaia/share
takatoh@wplj $ sudo chown nobody:nogroup /media/aysheaia/share
takatoh@wplj $ sudo chmod 777 /media/aysheaia/share

Samba の設定。…の前に設定ファイルのバックアップをとっておく。

takatoh@wplj $ cd /etc/samba
takatoh@wplj $ ls
gdbcommands  smb.conf  tls
takatoh@wplj $ sudo cp smb.conf smb.conf.orig
takatoh@wplj $ ls
gdbcommands  smb.conf  smb.conf.orig  tls

そして設定。

takatoh@wplj $ sudo vi smb.conf

設定ファイルは次のように変えた。

takatoh@wplj $ diff smb.conf.orig smb.conf
29c29,36
<    workgroup = WORKGROUP
---
> #   workgroup = WORKGROUP
>    workgroup = PANICBLANKET
> 
>    dos charset = CP932
>    unix charset = UTF-8
>    display charset = UTF-8
> 
>    map to guest = Bad User
259a267,274
> 
> [share]
> path = /media/aysheaia/share
> writable = yes
> force create mode = 0666
> force directory mode = 0777
> guest ok = yes
> guest only = yes

ポートの開放。

takatoh@wplj $ sudo ufw status
状態: 非アクティブ
takatoh@wplj $ sudo ufw enable
ファイアウォールはアクティブかつシステムの起動時に有効化されます。
takatoh@wplj $ sudo ufw status
状態: アクティブ
takatoh@wplj $ sudo ufw default DENY
デフォルトの incoming ポリシーは 'deny' に変更しました
(適用したい内容に基づいて必ずルールを更新してください)
takatoh@wplj $ sudo ufw allow samba
ルールを追加しました
ルールを追加しました (v6)
takatoh@wplj $ sudo ufw status
状態: アクティブ

To                         Action      From
--                         ------      ----
Samba                      ALLOW       Anywhere                  
Samba (v6)                 ALLOW       Anywhere (v6)

Samba を再起動。

takatoh@wplj $ sudo /etc/init.d/samba restart
[ ok ] Restarting nmbd (via systemctl): nmbd.service.
[ ok ] Restarting smbd (via systemctl): smbd.service.
[ ok ] Restarting samba-ad-dc (via systemctl): samba-ad-dc.service.

これでOK。Windows マシンからも確認できた。

外付けHDDを接続

USB の外付けHDDを接続すると、ちゃんと認識された。ただ、繋ぎっぱなしの HDD として使うには /etc/fstab に登録しないといけないので、その設定をする。繋いだ HDD は2つ。ファイルサーバ用とバックアップ用だ。

sudo blkid コマンドで HDD の UUID を調べる。

takatoh@wplj $ sudo blkid
/dev/sda1: UUID="D17D-DA22" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="6fa2ce8f-fa84-4c97-8280-e58107f1f5f7"
/dev/sda2: UUID="10ac8b6d-a943-4bc9-bd0e-7cbc3cb38125" TYPE="ext4" PARTUUID="3691980f-4128-465c-ab58-0ae98c7783a9"
/dev/sda3: UUID="fe038a20-aa4e-48d9-b98c-f8932b715370" TYPE="swap" PARTUUID="8383fce1-4445-419d-a75d-1e002ac985ef"
/dev/sdb1: PARTLABEL="Microsoft reserved partition" PARTUUID="f94bfbc2-2dd6-4f5a-bcd0-41fa20509112"
/dev/sdb2: LABEL="OPABINIA" UUID="962EDE6A2EDE42C3" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="70fb4b85-f7aa-4b55-b359-8a954bc7a0fc"
/dev/sdc1: PARTLABEL="Microsoft reserved partition" PARTUUID="5ab86c39-d82e-4a72-8cee-1c2553ebdbaa"
/dev/sdc2: LABEL="AYSHEAIA" UUID="ECC40F30C40EFC98" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="c7f4b645-6c8f-474b-8cb6-54aa69d553f8"

LABEL が AYSHEAIA と OPABINIA なのが外付けHDD。ファイルシステムは NTFS のまま使う。この HDD の UUID を持って、次のように /etc/fstab ファイルを編集した。

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# 
# / was on /dev/sda2 during installation
UUID=10ac8b6d-a943-4bc9-bd0e-7cbc3cb38125 / ext4 errors=remount-ro 0 1
# /boot/efi was on /dev/sda1 during installation
UUID=D17D-DA22 /boot/efi vfat umask=0077 0 1
# swap was on /dev/sda3 during installation
UUID=fe038a20-aa4e-48d9-b98c-f8932b715370 none swap sw 0 0
# USB HDD AYSHEAIA
UUID=ECC40F30C40EFC98 /media/aysheaia ntfs default 0 0
# USB HDD OPABINIA<br>UUID=962EDE6A2EDE42C3 /media/opabinia ntfs default 0 0

マウントポイントになるディレクトリを作る。

takatoh@wplj $ sudo mkdir /media/aysheaia
takatoh@wplj $ sudo mkdir /media/opabinia

そして再起動。無事認識されて、マウントされた。

takatoh@wplj $ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            1.9G     0  1.9G   0% /dev
tmpfs           385M  6.2M  379M   2% /run
/dev/sda2       454G  4.7G  427G   2% /
tmpfs           1.9G  208K  1.9G   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sdb2       2.8T  264M  2.8T   1% /media/aysheaia
/dev/sdc2       2.8T  264M  2.8T   1% /media/opabinia
/dev/sda1       511M  3.6M  508M   1% /boot/efi
tmpfs           385M  4.0K  385M   1% /run/user/108
tmpfs           385M   44K  385M   1% /run/user/1000

新しいPCが届いたのでWindowsを消してUbuntuをインストールした

また PC 買ったのかといわれそうだけど、これは予定通り。去年買ったノートPC が予定外だったのだ。
新しい PC は Ubuntu をインストールして宅内ネットワークのファイルサーバ兼WEBサーバにする。ホスト名は wplj。

Windows10 のセットアップとリカバリメディア作成

まずは Windows 10 のセットアップ。これは最低限の設定で。
それから、万が一 Ubuntu がうまくインストールできなかった時のために Windows10 のリカバリメディアを作成しておく。スタートメニューの「HP ヘルプとサポート」から「HP Recovery Manager」を起動。手順に従ってリカバリメディアを作成した(全部でDVD-R 3枚)。結構時間がかかる。

起動ドライブの順序変更

再起動中に F2 キーを押して BIOS 設定に移動、USB の CD-ROM ブートを内部 HD よりも優先に設定する。そして起動。すると Windows が起動してしまった。もう一度 BIOS 設定に移動して確認すると、ちゃんと USB CD-ROM が優先になっている。おかしい。仕方がないので、BIOS の BOOT メニューから USB CD-ROM ブートを選んだ。

Ubuntu 16.04 LTSのインストール

今度はちゃんと Ubuntu の DVD から起動したので、Ubuntu のインストールをする。途中、「Ubuntuのインストール中にアップデートをダウンロードする」を選ぶ。
また、Windows Boot Manager が検出されるので「ディスクを削除してUbuntuをインストール」を選択。あとはほぼデフォルトで。コンピューターの名前は上に書いた通り wplj。ユーザーは takatoh を作った。
しばらくしてインストールが完了。再起動すると、無事 Ubuntu が起動した。

とりあえずはここまで。あとの設定とかはエントリを分けて書く。

デーモンとして動かすSinatraアプリにユーザーのインストールしたRubyを使わせる

以前作った Sinatra アプリ(フォトビューワー)をデーモンとして動かそうとしてハマった記録。
Sinatra アプリをデーモン化したことは前にもやったことがあるので、基本的にはその時のエントリを見ながらやったんだけど、一つだけ、ハマりどころがあった。それはアプリが Ruby 2.0 以降(だっけ?)にサポートしているキーワード引数を使って書いてあるのに対して、システムにインストールされているのは Ruby 1.9.3 だってこと。ユーザーは rvm でインストールした 2.3.0 を使っているのでテスト中は動くけど、いざ本番になってみるとシステムの 1.9.3 が使われるので動かない。
どうにかしてデーモンにも rvm でインストールした 2.3.0 を使わせたい。
探し方が悪いのか、ググっても情報が出てこない。結局解決策を見つけたのは、自分のエントリだった。

つまり、起動スクリプトで GEM_PATH と GEM_HOME に rvm のパスを設定して export すればいいようだ。書いた起動スクリプトがこれ:

#!/bin/sh

PATH=/home/potov/.rvm/rubies/ruby-2.3.0/bin:/home/potov/.rvm/gems/ruby-2.3.0/bin:/sbin:/bin:/usr/bin
GEM_PATH=/home/potov/.rvm/gems/ruby-2.3.0
GEM_HOME=/home/potov/.rvm/gems/ruby-2.3.0
export PATH
export GEM_PATH
export GEM_HOME

POTOV_ROOT=/home/potov/potov

case "$1" in
start)
cd ${POTOV_ROOT}
unicorn -c unicorn.conf -D
;;
stop)
PID=`cat ${POTOV_ROOT}/unicorn.pid`
kill -QUIT ${PID}
;;
*)
echo "Usage: potov {start|stop}"
exit 1
;;
esac

exit 0

当然 PATH も rvm の Ruby のパスを設定している。
ともあれ、これで無事起動するようになった。

新しいPCが届いたのでWindowsを消してUbuntuをインストールした

今日一日かけて作業した。Ubuntu 16.04 LTS。ホスト名は muffinman。
宅内ネットワークの Webサーバ用。apostrophe(旧nightschool)で動かしていた Sinatra アプリ2つを移設。いくつかハマりどころがあったけど、なんとか終わった。
ホントはちゃんと作業記録を残しておくべきなんだろうけど、覚えていないので書けない。まあ、うまくいったからいいか。

Ubuntu:ホスト名を変更する

/etc/hostnameの変更

直接編集してもいいけど hostname コマンドで変更できる。

takatoh@nightschool $ hostname
nightschool
takatoh@nightschool $ sudo hostname apostrophe
[sudo] password for takatoh:

/etc/hostsの変更

127.0.0.1	localhost
127.0.0.1	apostrophe   # <- ここを変更

192.168.1.12    valarie

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

ネットワークの再起動

takatoh@nightschool $ sudo /etc/init.d/networking restart
takatoh@nightschool $ hostname
apostrophe

これで完了。
/etc/hosts を書き換えてから出ないとネットワークを再起動したときにエラーが出る。

takatoh@nightschool $ sudo /etc/init.d/networking restart
sudo: ホスト apostrophe の名前解決ができません

ちなみに、プロンプトのホスト名が変わってないけど、これは端末を起動し直すとちゃんと変更が反映される。

[追記]

上記の通りで OK かと思ったら、完全じゃなかった。OS を再起動したらホスト名が戻ってしまった。

takatoh@nightschool $ hostname
nightschool

hostnamectl コマンドで見ると:

takatoh@nightschool $ hostnamectl
   Static hostname: nightschool
         Icon name: computer-desktop
           Chassis: desktop
           Boot ID: 2026269b5ed74ccab65e1a806d7e231f
  Operating System: Ubuntu 14.04.4 LTS
            Kernel: Linux 3.13.0-85-generic
      Architecture: x86_64

hostnamectl コマンドで変更する。

takatoh@nightschool $ sudo hostnamectl set-hostname apostrophe
takatoh@nightschool $ hostnamectl
   Static hostname: apostrophe
         Icon name: computer-desktop
           Chassis: desktop
           Boot ID: 2026269b5ed74ccab65e1a806d7e231f
  Operating System: Ubuntu 14.04.4 LTS
            Kernel: Linux 3.13.0-85-generic
      Architecture: x86_64

参考ページ:

 cf. ホスト名を設定する

Ubuntu:有線LANを繋がるようにした

はじめに

今まで Ubuntu マシンの nightschool は無線で接続していた。けれどうちの環境(無線LANルータは1階、マシンは2階にある)のせいか、接続が不安定で速度も遅かった。2階にイーサネットのジャックがあるので有線でつないでみたものの、どういうわけかリンクが確立しない(リンクランプが点灯しない、Ubuntu で Ethernet接続が有効にならない)という状況だった。
マシンを買って以来約2年近くもこの状態だったのだけど、ようやく解決するために重い腰を上げた次第。

参考にしたページ

このページが参考になった。

 cf. UbuntuでNICを認識しない場合の対応 – RainbowDevilsLand

状況の確認

まずは現在の状況の確認から。ifconfig コマンドで NIC の状況を見てみる。

takatoh@nightschool $ ifconfig
eth0      Link encap:イーサネット  ハードウェアアドレス f8:bc:12:78:84:ab  
          UP BROADCAST MULTICAST  MTU:1500  メトリック:1
          RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000 
          RXバイト:0 (0.0 B)  TXバイト:0 (0.0 B)

lo        Link encap:ローカルループバック  
          inetアドレス:127.0.0.1  マスク:255.0.0.0
          inet6アドレス: ::1/128 範囲:ホスト
          UP LOOPBACK RUNNING  MTU:65536  メトリック:1
          RXパケット:110255 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:110255 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:0 
          RXバイト:629344324 (629.3 MB)  TXバイト:629344324 (629.3 MB)

wlan0     Link encap:イーサネット  ハードウェアアドレス 54:35:30:bc:ed:f9  
          inetアドレス:192.168.1.5  ブロードキャスト:192.168.1.255  マスク:255.255.255.0
          inet6アドレス: fe80::5635:30ff:febc:edf9/64 範囲:リンク
          inet6アドレス: 2408:212:ac6:e200:5635:30ff:febc:edf9/64 範囲:グローバル
          inet6アドレス: 2408:212:ac6:e200:75ec:809a:c077:3ea5/64 範囲:グローバル
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:46490 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:49384 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000 
          RXバイト:6255035 (6.2 MB)  TXバイト:18310646 (18.3 MB)

イーサネットの NIC (eth0)自体は認識しているようだけど、アドレスが割り振られていない。
参考にしたページに書かれているのは、NIC 自体が認識されていない場合の対処法だけど、ダメ元で同じようにドライバをインストールしてみることにした。そこで、NIC のチップの種類を調べる。

takatoh@nightschool $ lspci | grep 'Ethernet\|Network'
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)
03:00.0 Network controller: Qualcomm Atheros QCA9565 / AR9565 Wireless Network Adapter (rev 01)

Realtek の RTL8111/8168/8411 っていうチップのようだ。

ドライバのダウンロードとインストール

Realtek のダウンロードセンターから、RTL8111 を検索してダウンロード。0004-r8168-8.041.01.tar.bz2 というファイルだ。
これを展開する。

takatoh@nightschool $ tar xjvf 0004-r8168-8.041.01.tar.bz2

中に含まれている README ファイルを読むと、autorun.sh を実行すればいいようだ。

takatoh@nightschool $ cd r8168-8.041.01
takatoh@nightschool $ sudo ./autorun.sh

Check old driver and unload it.
rmmod r8169
Build the module and install
Can't read private key
Backup r8169.ko
rename r8169.ko to r8169.bak
DEPMOD 3.13.0-79-generic
load module r8168
Updating initramfs. Please wait.
update-initramfs: Generating /boot/initrd.img-3.13.0-79-generic
Completed.

Completed と出ている。うまくいったか?

確認

ふたたび ifconfig コマンドで確認。

takatoh@nightschool $ ifconfig
eth0      Link encap:イーサネット  ハードウェアアドレス f8:bc:12:78:84:ab  
          inetアドレス:192.168.1.20  ブロードキャスト:192.168.1.255  マスク:255.255.255.0
          inet6アドレス: 2408:212:ac6:e200:fabc:12ff:fe78:84ab/64 範囲:グローバル
          inet6アドレス: fe80::fabc:12ff:fe78:84ab/64 範囲:リンク
          inet6アドレス: 2408:212:ac6:e200:486:4ce3:78a7:b216/64 範囲:グローバル
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:13 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:25 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000 
          RXバイト:1993 (1.9 KB)  TXバイト:4054 (4.0 KB)
          割り込み:45 ベースアドレス:0x4000 

lo        Link encap:ローカルループバック  
          inetアドレス:127.0.0.1  マスク:255.0.0.0
          inet6アドレス: ::1/128 範囲:ホスト
          UP LOOPBACK RUNNING  MTU:65536  メトリック:1
          RXパケット:110581 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:110581 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:0 
          RXバイト:629379076 (629.3 MB)  TXバイト:629379076 (629.3 MB)

wlan0     Link encap:イーサネット  ハードウェアアドレス 54:35:30:bc:ed:f9  
          inetアドレス:192.168.1.5  ブロードキャスト:192.168.1.255  マスク:255.255.255.0
          inet6アドレス: fe80::5635:30ff:febc:edf9/64 範囲:リンク
          inet6アドレス: 2408:212:ac6:e200:5635:30ff:febc:edf9/64 範囲:グローバル
          inet6アドレス: 2408:212:ac6:e200:75ec:809a:c077:3ea5/64 範囲:グローバル
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:58509 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:60687 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000 
          RXバイト:7434710 (7.4 MB)  TXバイト:19433795 (19.4 MB)

おお、eth0 にもアドレスが割り振られている。画面右上には Ethernet接続のマークも出ている。どうやらうまくいったようだ。

まとめ

イーサネットの不具合は、ドライバをインストールしたら治った。
接続状況はこうなった。

Screenshot from 2016-04-30 09:11:13