Ubuntu 16.04にGolang 1.9をインストール

ググると、Ubuntu の公式パッケージにある Go は 1.6 と古いので非公式のリポジトリを登録しろ、という情報があるんだけど、apt search golang してみたら golang-1.9 というパッケージがあった。なので、これをインストールする。

takatoh@envelopes $ sudo apt install golang-1.9

ところが go version コマンドを実行しても、インストールされてない、apt install golang-go をしろ、と言われる。素直にそうしてみると、今度は Go 1.6 がインストールされてしまった。
調べてみると、/usr/lib の下に golang-1.9 と golang-1.6 があって、/usr/bin/go から 1.6 の方へリンクがはられている。ということはこのリンクを 1.9 の方へはりなおしてやればいいはず。いったん 1.6 をアンインストールしてから、リンクをはりなおした。

takatoh@envelopes $ sudo ln -s /usr/lib/go-1.9/bin/go /usr/bin/go
takatoh@envelopes $ sudo ln -s /usr/lib/go-1.9/bin/gofmt /usr/bin/gofmt

これで無事完了。

takatoh@envelopes $ go version
go version go1.9.2 linux/amd64

vsftpdのインストールと設定→解決

昨日の vsftpd が動かない問題、解決した。
話は2段階で進む。まずはじめに、vsftpd 自体が起動しない問題、これは listen ディレクティブと listen_ipv6 ディレクティブが両方 YES になっていたためだった。listen_ipv6 のほうをコメントアウトして解決。

これで起動するようにはなったけど、アクセスしてみると「500 OOPS: vsftpd: refusing to run with writable root inside chroot()」というエラーが出てログインできない。これが2つめ。ググるとつぎのページが見つかった。

 cf. vsftpdの設定で謎のエラーにハマった – TomoProgの技術書

どうやら chroot した先に書き込み権限があるとエラーになるらしい。allow_writeable_chroot ディレクティブを追加して解決。

それにしても listenlisten_ipv6 はデフォルトで両方 YES になってた。デフォルトが動かない設定になってるってどういうことよ?

vsftpdのインストールと設定→動かない

メインマシン envelopes (Ubuntu 16.04) と Windowns マシン valarie とのデータのやり取りのため、envelopes に vsftpd をインストールした。

takatoh@envelopes $ sudo apt install vsftpd

設定は、基本的には以前さくらの VPS に設定した時と同じ。ただし、ASCII 転送を有効にした。あと、設定ファイルは /etc/vsftpd.conf にあった。

それから以下を追記。

空の chroot_list ファイルを作る。

takatoh@envelopes $ sudo touch vsftpd.chroot_list

user_list ファイルを作る。

takatoh@envelopes $ sudo vim vsftpd.user_list

takatoh だけを指定した。

ポート 21 を開ける。

takatoh@envelopes $ sudo ufw allow 21/tcp
ルールを追加しました
ルールを追加しました (v6)

vsftpd をリスタート。

takatoh@envelopes $ sudo systemctl restart vsftpd

あれ?何もメッセージが出ないけどいいのかな?

takatoh@envelopes $ ps ax | grep vsftpd
18124 pts/18   S+     0:00 grep --color=auto vsftpd

ああ、やっぱり動いてない。なんでだ……

さくらのVPSプラン乗り換え計画(4)

MySQL のインストール。

takatoh@tk2-254-36564:~$ sudo apt install mysql-server

途中で root のパスワードを訊かれるので入力(2回)。
バージョンの確認。

takatoh@tk2-254-36564:~$ mysql --version
mysql  Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using  EditLine wrapper

設定ファイルは /etc/mysql/my.cnf。

takatoh@tk2-254-36564:~$ cd /etc/mysql
takatoh@tk2-254-36564:/etc/mysql$ cat my.cnf
#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
# 
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

…と思ったら、何やら追加の設定は別のファイルに書くらしい。/etc/mysql/conf.d と /etc/mysql/mysql.conf.d の下に .cnf ファイルを置けば読み込んでくれるってことでいいのかな。2つのディレクトリの下にはファイルが用意されている。

takatoh@tk2-254-36564:/etc/mysql$ ls conf.d
mysql.cnf  mysqldump.cnf
takatoh@tk2-254-36564:/etc/mysql$ ls mysql.conf.d
mysqld.cnf  mysqld_safe_syslog.cnf

日本語を扱えるようにデフォルトの charset を utf-8 にするため、それぞれのファイルに次のように設定してみた(色を付けたところが追記したところ)。

これでいいはず。
MySQL を再起動してみよう。

takatoh@tk2-254-36564:/etc/mysql$ sudo systemctl restart mysqld
Failed to restart mysqld.service: Unit mysqld.service not found.

あれ?だめだ。Unit ファイルがないってか?

takatoh@tk2-254-36564:/etc/mysql$ sudo /etc/init.d/mysql restart
[....] Restarting mysql (via systemctl): mysql.serviceJob for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
 failed!

/etc/init.d/mysql を直接叩いてもダメだ。メッセージに従って詳細を見てみよう。

takatoh@tk2-254-36564:/etc/mysql$ systemctl status mysql.service
* mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: activating (start-post) (Result: exit-code) since Thu 2017-05-04 12:59:31 JST; 21s ago
  Process: 8060 ExecStart=/usr/sbin/mysqld (code=exited, status=1/FAILURE)
  Process: 8051 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
 Main PID: 8060 (code=exited, status=1/FAILURE);         : 8061 (mysql-systemd-s)
   CGroup: /system.slice/mysql.service
           -control
             |-8061 /bin/bash /usr/share/mysql/mysql-systemd-start post
             -8125 sleep 1

May 04 12:59:01 tk2-254-36564 systemd[1]: Starting MySQL Community Server...
May 04 12:59:04 tk2-254-36564 systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE

なんかエラー?

takatoh@tk2-254-36564:/etc/mysql$ journalctl -xe

こちらの出力は長くて載せられないけど、やっぱりエラーになってるらしい。
mysql.servece ファイルが無いとの事なので調べげ見ると、/etc/systemd/system にはないけど、/lib/systemd/system にはあることがわかった。てことは、リンクを張ればいいのかな。

takatoh@tk2-254-36564:/etc/mysql$ cd
takatoh@tk2-254-36564:~$ sudo ln -s /lib/systemd/system/mysql.service /etc/systemd/system/mysql.service
takatoh@tk2-254-36564:~$ ls -l /etc/systemd/system
total 32
drwxr-xr-x 2 root root 4096 May  4 10:01 default.target.wants
drwxr-xr-x 2 root root 4096 May  4 10:00 getty.target.wants
drwxr-xr-x 2 root root 4096 May  4 10:20 graphical.target.wants
drwxr-xr-x 2 root root 4096 May  4 11:47 multi-user.target.wants
lrwxrwxrwx 1 root root   33 May  4 13:08 mysql.service -> /lib/systemd/system/mysql.service
drwxr-xr-x 2 root root 4096 May  4 10:01 network-online.target.wants
drwxr-xr-x 2 root root 4096 May  4 10:22 sockets.target.wants
lrwxrwxrwx 1 root root   31 May  4 10:23 sshd.service -> /lib/systemd/system/ssh.service
drwxr-xr-x 2 root root 4096 May  4 10:23 sysinit.target.wants
lrwxrwxrwx 1 root root   35 May  4 10:01 syslog.service -> /lib/systemd/system/rsyslog.service
drwxr-xr-x 2 root root 4096 May  4 10:01 timers.target.wants

これでどうだ。

takatoh@tk2-254-36564:~$ sudo systemctl restart mysql
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.

だめか。
Unit ファイルのなかを覗いてみる。

うん、わからん。
PermissionsStartOnly=true って行が気になる。start だけってことなのかな。サーバ自体を再起動してみるか。

うーん、再起動してもダメだなあ。
とりあえずここまでにしよう。後で追記する。

[追記]

いったん MySQL サーバをアンインストールして、再インストールしたらどうかと思ってやってみたら、今度はインストールすらエラーが出るようになってしまった。
こりゃダメか。最初からやり直しだな。

さくらのVPSプラン乗り換え計画(3)

Ruby と Git をインストール。
まず Ruby。

takatoh@tk2-254-36564:~$ sudo apt install ruby ruby-dev
takatoh@tk2-254-36564:~$ ruby -v
ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu]

bundler が入っていないのでインストール。

takatoh@tk2-254-36564:~$ sudo gem install bundler

つぎは Git。

takatoh@tk2-254-36564:~$ sudo apt install git
takatoh@tk2-254-36564:~$ git --version
git version 2.7.4

さくらのVPSプラン乗り換え計画(1)

タイトルの通り、プランの乗り換えにチャレンジ。

VPS の OS は標準の CentOS じゃなくて、使い慣れた Ubuntu にしたかったので、OS の再インストールをした。ところが、用意されている「標準OS」の Ubuntu 16.04 をインストールしてみたけど、ログインができない。パスワードを間違えたのかと思って何度かやり直し(インストール自体のやり直しも含めて)やってみたけどダメ。CentoOS6 をインストールすると何故か大丈夫。なんでだ?
仕方がないので「カスタムOS」の Ubuntu 16.04 をインストールしたら(インストールに時間はかかったけど)無事、ログインに成功した。ユーザー名は takatoh。

VPS のページから、コンソールを選んでサーバに接続する。
まずは ssh の設定。/etc/ssh/sshd_config ファイルを編集する。

$ sudo vi /etc/ssh/sshd_config

ポートを変更。

root でのログインを禁止。

設定を反映するために sshd を再起動。

$ sudo systemctl restart sshd

次にファイアウォールの設定。

$ sudo ufw enable
$ sudo ufw default DENY
$ sudo ufw allow 60000

これで、ローカルの PC から ssh でアクセスできるようになったはず。試してみよう。

takatoh@envelopes $ ssh -p 60000 takatoh@160.16.224.68
takatoh@160.16.224.68's password: 
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-77-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
Last login: Thu May  4 10:48:04 2017
takatoh@tk2-254-36564:~$

OK。
それじゃこんどはパスワード認証をやめて、公開鍵での認証に切り替える。

takatoh@tk2-254-36564:~$ pwd
/home/takatoh
takatoh@tk2-254-36564:~$ mkdir .ssh
takatoh@tk2-254-36564:~$ chmod 700 .ssh
takatoh@tk2-254-36564:~$ cd .ssh
takatoh@tk2-254-36564:~/.ssh$ wget -O authorized_keys https://github.com/takatoh.keys
--2017-05-04 11:08:43--  https://github.com/takatoh.keys
Resolving github.com (github.com)... 192.30.255.113, 192.30.255.112
Connecting to github.com (github.com)|192.30.255.113|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/plain]
Saving to: 'authorized_keys'

authorized_keys         [ <=>                ]     381  --.-KB/s    in 0.001s  

2017-05-04 11:08:43 (309 KB/s) - 'authorized_keys' saved [381]

takatoh@tk2-254-36564:~/.ssh$ ls -al
total 12
drwx------ 2 takatoh takatoh 4096 May  4 11:08 .
drwxr-xr-x 4 takatoh takatoh 4096 May  4 11:08 ..
-rw-rw-r-- 1 takatoh takatoh  381 May  4 11:08 authorized_keys
takatoh@tk2-254-36564:~/.ssh$ chmod 600 authorized_keys
takatoh@tk2-254-36564:~/.ssh$ ls -al
total 12
drwx------ 2 takatoh takatoh 4096 May  4 11:08 .
drwxr-xr-x 4 takatoh takatoh 4096 May  4 11:08 ..
-rw------- 1 takatoh takatoh  381 May  4 11:08 authorized_keys

ここでいったんログアウトして、鍵認証でログインできるか試してみる。

takatoh@envelopes $ ssh -p 60000 takatoh@160.16.224.68
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-77-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
Last login: Thu May  4 11:05:11 2017 from 58.1.225.90

OK。それじゃもう一度 /etc/ssh/sshd_config を編集して、パスワード認証をしないことにする。

sshd の再起動。

takatoh@tk2-254-36564:~$ sudo systemctl restart sshd

とりあえずここまで。

結局PCを買い換えた

先週の金曜日に起動しなくなってしまったメインマシン(apostrophe)、土曜日に DELL のサポートに電話してやり取りした結果、DELL に送って修理が必要ということになった。で、どのくらいかかるのかときいたら、期間にして2週間、費用にして3〜4万円(サポート期間が過ぎているので有償)という回答だった。
少し考えたけど、そんなにかかるなら買ってしまったほうがいい。DELL の即納モデルなら1週間もすれば届くだろうし、ちょうど春の割引キャンペーンをやっているので本体だけなら4万円をちょっと超えるくらいだ。
というわけで、一昨日届いた。昨日は時間がなかったので、今日セットアップ。プリインストールの Windows 10 のリカバリメディア(何故か USB フラッシュメモリしか選べないので急いで買ってきた)を作っておいて、Windows はさっくり削除して Ubuntu 16.04 LTS をインストールした。とりあえずは最低限のセットアップが終わったところ。あとは時間を見て環境を整えていこう。
あ、ホスト名は envelopes にした。
それにしても出費が続くなぁ。

メインマシン(Ubuntu)が起動しなくなった

今朝のこと。Ubuntu 16.04 のメインマシン(apostrophe)を見るとソフトウェアのアップデートが表示されていたので、アップデートした。すると、アップデートを完了するにはマシンの再起動が必要だというので、再起動したところ、起動しなくなってしまった。DELL のロゴマークが表示された状態で止まっていて、それっきり動きがない。
ともかく朝で時間がないので、そのまま様子を見ることにして(つまりほうっておいて)出かけたわけだ。
で、今帰ってきてみたら今朝と同じ状態のまま。マシンの電源を切ったり入れたりしてみるも変化がない。どういうわけだ。明日明後日と用事があってまとまった時間が取れそうにないんだけど、最悪再インストールかも。どうしたもんかね。

[追記]

Ubuntu のインストールディスクを入れて起動してみたけどダメだった。というか、DELL のロゴマークが表示されている状態で止まってるってここは、OS 以前の BIOS の途中で止まってるってことじゃなかろうか。こりゃダメかな。

Ubuntu 16.04にNokogiriがインストールできない

rubygems の Nokogiri のインストールで躓いた。環境は:

  • Ubuntu 16.04 LTS
  • Ruby 2.3.1
  • Gem 2.5.1

いろいろ試した結果、次のパッケージを sudo apt install したらインストールできた。

  • ruby-dev
  • libxml2
  • libxml2-dev
  • zlib1g-dev

これらをインストールしたうえで、Nokogiri をインストール。

takatoh@apostrophe $ sudo gem install nokogiri
Building native extensions.  This could take a while...
Successfully installed nokogiri-1.7.0.1
Parsing documentation for nokogiri-1.7.0.1
Installing ri documentation for nokogiri-1.7.0.1
Done installing documentation for nokogiri after 8 seconds
1 gem installed