さくらの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

とりあえずここまで。

Rails 4.2.8にしたら外部からアクセスできなくなった

Rails を 4.1.4 から 4.2.8(4.2 系の最新版)にアップデートしたら、rails s で起動したサーバに外部(ほかの PC)からアクセスできなくなっていた。4.2 で挙動が変わったらしい。

 cf. rails sで起動したサーバにブラウザからアクセスできない – Qiita

上の参考ページにあるように、-b オプションをつければいい。

takatoh@envelopes $ bundle exec rails s -b 0.0.0.0

Elixir 練習問題 ControlFlow-3

こんな感じでいいかな。

^o^ > elixir practice_12_3.exs
warning: variable file is unused
  practice_12_3.exs:6

** (RuntimeError) Error occured.
    practice_12_3.exs:3: OK.ok!/1
    (elixir) lib/code.ex:363: Code.require_file/2

ちなみに、somefile の代わりに存在するファイルで試してみると次のようになる。

^o^ > elixir practice_12_3.exs
warning: variable file is unused
  practice_12_3.exs:6

エラーは起きない。警告が出てるのは file 変数を使ってないからだね。

Elixir 練習問題 ControlFlow-1

気が付けば前回の Elixir のエントリからひと月も経ってしまった。
ま、気を取り直して。FizzBuzz を case を使って書け、と。

^o^ > elixir practice_12_1.exs
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz

結局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 の途中で止まってるってことじゃなかろうか。こりゃダメかな。

球面上の点を平面上にステレオ投影する

先週のさらに続き。先週は、球面上の点を平面上に投影するのに X, Y 座標をそのまま使って水平投影したけど、今度はステレオ投影というのをやってみる。
ステレオ投影は Wikipedia に詳しく載っている。
先週と同じように、下半球の点 300 個を XY 平面(赤道面)上に投影する。やってみたのが下の図。

コードは次の通り。

やっつけ仕事なので、ヘルプもないけど、先週の gss_gen コマンド(--cartesian オプション付き)の結果を入力として、投影点の座標を CSV で出力する。