圧縮:
takatoh@nightschool $ tar zcvf archive.tar.gz dirname
展開:
takatoh@nightschool $ tar zxvf archive.tar.gz
takatoh's blog – Learning programming languages.
圧縮:
takatoh@nightschool $ tar zcvf archive.tar.gz dirname
展開:
takatoh@nightschool $ tar zxvf archive.tar.gz
logrotate の設定をして1日待ってみたけど、ログファイルがローテーションされていない。仕方がないので、-f オプションを使って強制的に行ってみたら、次のようなメッセージが出た。
takatoh@nightschool $ sudo logrotate -f -v sombrero reading config file sombrero Handling 1 logs rotating pattern: /home/sombrero/sombrero/unicorn.log forced from command line (60 rotations) empty log files are rotated, old logs are removed considering log /home/sombrero/sombrero/unicorn.log error: skipping "/home/sombrero/sombrero/unicorn.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
なんだかよくわからないけど、親ディレクトリのパーミッションがセキュアじゃないといってる?設定ファイルに su ディレクティブをセットしろともいってる。
ちょっと調べてみると、次のページが見つかった。
cf. logrotate(8) の create と su ディレクティブについて – はてダ
読んでもよくわからないんだけど、とにかく次の1行を設定ファイルに追加した。
su root root
これでどうだ。
takatoh@nightschool $ sudo logrotate -f -v sombrero reading config file sombrero Handling 1 logs rotating pattern: /home/sombrero/sombrero/unicorn.log forced from command line (60 rotations) empty log files are rotated, old logs are removed considering log /home/sombrero/sombrero/unicorn.log log needs rotating rotating log /home/sombrero/sombrero/unicorn.log, log->rotateCount is 60 dateext suffix '-20150409' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' glob finding logs to compress failed glob finding old rotated logs failed renaming /home/sombrero/sombrero/unicorn.log to /home/sombrero/sombrero/unicorn.log-20150409 running postrotate script
今度はうまくいった?
takatoh@nightschool $ ls /home/sombrero/sombrero CHANGES bin lib unicorn.conf views Gemfile boot.rb public unicorn.log Gemfile.lock config.yaml rakefile unicorn.log-20150409 app.rb config.yaml.sample start.cmd unicorn.pid app.ru db tmp version.rb
おお、ちゃんとローテートされたファイル(unicorn.log-20150409)ができて、新しいログファイル(unicorn.log)もできている。
これでOKかな。
去年の7月から Sinatra + Unicorn で動かしている Web アプリがあるんだけど、そのログファイルが巨大になっていた。↓の unicorn.log がそれ。75MBにもなっている。
そこで、logrotate を使ってみることにした。
takatoh@nightschool $ ls -lh 合計 75M -rw-rw-r-- 1 sombrero sombrero 752 7月 26 2014 CHANGES -rw-rw-r-- 1 sombrero sombrero 122 7月 26 2014 Gemfile -rw-rw-r-- 1 sombrero sombrero 468 7月 26 2014 Gemfile.lock -rw-rw-r-- 1 sombrero sombrero 7.5K 1月 4 10:39 app.rb -rw-rw-r-- 1 sombrero sombrero 64 7月 26 2014 app.ru drwxrwxr-x 2 sombrero sombrero 4.0K 7月 26 2014 bin -rw-rw-r-- 1 sombrero sombrero 327 7月 26 2014 boot.rb -rw-rw-r-- 1 sombrero sombrero 126 7月 26 2014 config.yaml -rw-rw-r-- 1 sombrero sombrero 104 7月 26 2014 config.yaml.sample drwxrwxr-x 3 sombrero sombrero 4.0K 4月 8 04:59 db drwxrwxr-x 3 sombrero sombrero 4.0K 7月 26 2014 lib drwxrwxr-x 3 sombrero sombrero 4.0K 7月 26 2014 public -rw-rw-r-- 1 sombrero sombrero 705 7月 26 2014 rakefile -rw-rw-r-- 1 sombrero sombrero 14 7月 26 2014 start.cmd drwxrwxr-x 2 sombrero sombrero 4.0K 4月 8 05:00 tmp -rw-rw-rw- 1 sombrero sombrero 109 7月 26 2014 unicorn.conf -rw-rw-r-- 1 sombrero sombrero 75M 4月 8 16:50 unicorn.log -rw-r--r-- 1 root root 5 3月 24 20:43 unicorn.pid -rw-rw-r-- 1 sombrero sombrero 32 7月 26 2014 version.rb drwxrwxr-x 2 sombrero sombrero 4.0K 7月 26 2014 views
参考になったのは次のページ。
cf. Rails + Unicorn の logrotateAdd Star – yoshioblog
cf. ログローテーション(logrotate)を使ってみる ( httpd(apache)の設定例 )
特に上のページを参考にして設定ファイルを書いてみた。設定ファイルは /etc/logrotate.d ディレクトリの下に、サービス名でファイルを作ればいいようだ。
書いた設定がこれ。
/home/sombrero/sombrero/unicorn.log { daily missingok rotate 60 dateext compress delaycompress postrotate pid=/home/sombrero/sombrero/unicorn.pid test -s $pid && kill -USR1 "$(cat $pid)" endscript }
設定の意味は次の通り。
daily
毎日ローテーションするmissingok
ログファイルがなくてもエラーを出さないrotate 60
60回ローテーションするdateext
ローテーションされたログファイルのサフィックスを日付形式にするcompress
ローテーションされたログファイルを圧縮するdelaycompress
圧縮するのを次のローテーションの時にするpostrorate と endscript の間の記述は、ローテーションが終わったあとに実行される。
Unicorn は USR1 シグナルを受け取ると、ログファイルを開きなおしてくれるそうなので、そうしている。
logrotate -d で確認する。
takatoh@nightschool $ logrotate -d sombrero reading config file sombrero Handling 1 logs rotating pattern: /home/sombrero/sombrero/unicorn.log after 1 days (60 rotations) empty log files are rotated, old logs are removed considering log /home/sombrero/sombrero/unicorn.log log does not need rotating
エラーらしきものは出てないから大丈夫のようだ。
あとは1日待って確認しよう。
limit_conn_zone ディレクティブと limit_conn ディレクティブを使う。
ここのページが参考になった。
cf. http://wiki.nginx.org/HttpLimitConnModuleJa
まずはゾーンの設定。これは制限の対象を何にするかの定義みたい。/etc/nginx/nginx.conf の http セクションの中で定義する。こんな感じ。
limit_conn_zone $binary_remote_addr zone=addr:2m;
$binary_remote_addr という変数は Nginx に標準で定義されている変数で、アクセスして来たクライアントのIPアドレス(バイナリ)が入っている。これをキーにしている、つまり制限の対象にしているわけだ。で、その設定に、addr という名前をつけている。2m と書いてあるのは、キーを保存するためのメモリーを確保しているみたい。
さて、次は実際に制限を設定するほう。例えば、vhost.example.com というバーチャルホストに対するアクセスを制限したければ、/etc/nginx/sites-enabled/vhost.exmaple.com の
server セクションに次のように設定する。
limit_conn addr 1;
これで、同一IPからのコネクションを同時に1つだけに制限できる。
なんか情報が少なくて自信がないけど、EC2 で動かしてるサーバーで試してみたら、ちゃんと制限されて2つ目のコネクションには 503 が帰ってきたので、多分あってる。
Windowsマシンから、Ubuntuのマシンにsshで接続できるようにする。
↓このページが参考になった。
cf. http://www.server-world.info/query?os=Ubuntu_14.04&p=ssh
まずは、ssh サーバを atp-get でインストール。
takatoh@nightschool $ sudo apt-get install openssh-server [sudo] password for takatoh: パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 以下のパッケージが自動でインストールされましたが、もう必要とされていません: firefox-locale-en linux-headers-3.13.0-34 linux-headers-3.13.0-34-generic linux-image-3.13.0-34-generic linux-image-extra-3.13.0-34-generic これを削除するには 'apt-get autoremove' を利用してください。 以下の特別パッケージがインストールされます: libck-connector0 openssh-sftp-server ssh-import-id 提案パッケージ: rssh molly-guard monkeysphere 以下のパッケージが新たにインストールされます: libck-connector0 openssh-server openssh-sftp-server ssh-import-id アップグレード: 0 個、新規インストール: 4 個、削除: 0 個、保留: 12 個。 374 kB のアーカイブを取得する必要があります。 この操作後に追加で 1,214 kB のディスク容量が消費されます。 続行しますか? [Y/n] Y 取得:1 http://jp.archive.ubuntu.com/ubuntu/ trusty/main libck-connector0 amd64 0.4.5-3.1ubuntu2 [10.5 kB] 取得:2 http://jp.archive.ubuntu.com/ubuntu/ trusty-updates/main openssh-sftp-server amd64 1:6.6p1-2ubuntu2 [34.1 kB] 取得:3 http://jp.archive.ubuntu.com/ubuntu/ trusty-updates/main openssh-server amd64 1:6.6p1-2ubuntu2 [319 kB] 取得:4 http://jp.archive.ubuntu.com/ubuntu/ trusty/main ssh-import-id all 3.21-0ubuntu1 [9,624 B] 374 kB を 0秒 で取得しました (397 kB/s) パッケージを事前設定しています ... 以前に未選択のパッケージ libck-connector0:amd64 を選択しています。 (データベースを読み込んでいます ... 現在 421617 個のファイルとディレクトリがインストールされています。) Preparing to unpack .../libck-connector0_0.4.5-3.1ubuntu2_amd64.deb ... Unpacking libck-connector0:amd64 (0.4.5-3.1ubuntu2) ... 以前に未選択のパッケージ openssh-sftp-server を選択しています。 Preparing to unpack .../openssh-sftp-server_1%3a6.6p1-2ubuntu2_amd64.deb ... Unpacking openssh-sftp-server (1:6.6p1-2ubuntu2) ... 以前に未選択のパッケージ openssh-server を選択しています。 Preparing to unpack .../openssh-server_1%3a6.6p1-2ubuntu2_amd64.deb ... Unpacking openssh-server (1:6.6p1-2ubuntu2) ... 以前に未選択のパッケージ ssh-import-id を選択しています。 Preparing to unpack .../ssh-import-id_3.21-0ubuntu1_all.deb ... Unpacking ssh-import-id (3.21-0ubuntu1) ... Processing triggers for man-db (2.6.7.1-1ubuntu1) ... Processing triggers for ureadahead (0.100.0-16) ... ureadahead will be reprofiled on next reboot Processing triggers for ufw (0.34~rc-0ubuntu2) ... libck-connector0:amd64 (0.4.5-3.1ubuntu2) を設定しています ... openssh-sftp-server (1:6.6p1-2ubuntu2) を設定しています ... openssh-server (1:6.6p1-2ubuntu2) を設定しています ... Creating SSH2 RSA key; this may take some time ... Creating SSH2 DSA key; this may take some time ... Creating SSH2 ECDSA key; this may take some time ... Creating SSH2 ED25519 key; this may take some time ... ssh start/running, process 16328 ssh-import-id (3.21-0ubuntu1) を設定しています ... Processing triggers for libc-bin (2.19-0ubuntu6.3) ... Processing triggers for ureadahead (0.100.0-16) ... Processing triggers for ufw (0.34~rc-0ubuntu2) ...
次に /etc/ssh/sshd_config ファイルを編集。28行目を次のように no にする。
PermitRootLogin no
root でのログインを拒否するわけだね。ちなみにデフォルトでは without-password となっていて、これは鍵認証が必要な設定らしい。
22番ポートを開ける。というか開いていた。
takatoh@nightschool $ sudo ufw status 状態: アクティブ To Action From -- ------ ---- 3000/tcp ALLOW Anywhere 9000/tcp ALLOW Anywhere 22/tcp ALLOW Anywhere 8080/tcp ALLOW Anywhere 80 ALLOW Anywhere 3000/tcp (v6) ALLOW Anywhere (v6) 9000/tcp (v6) ALLOW Anywhere (v6) 22/tcp (v6) ALLOW Anywhere (v6) 8080/tcp (v6) ALLOW Anywhere (v6) 80 (v6) ALLOW Anywhere (v6)
最後に、sshを再起動。
takatoh@nightschool $ initctl restart ssh initctl:不明なジョブ: ssh
あれ、ダメだ。上の参考ページのマシンとなにか違うのかも。
しょうがないから、/etc/init.d/ssh を直接叩いて再起動。
takatoh@nightschool $ /etc/init.d/ssh restart
これで Ubuntu 側は OK。今度は Windows 側。
接続には Tera Term を使う。
ホストに IPアドレスを指定して、OKボタンを押す。上に書いたとおり、ポートはデフォルトの22番。
ユーザー名とパスワードを入力して OK ボタンを押すと、無事接続できた。
Sinatra + unicorn の組み合わせで Webアプリを動かしていて、これに Nginx からプロキシを通したい。もうちょっと具体的に言うと、Sinatra アプリは 8080 番ポートで動いていて、外部からは 80 番ポートでアクセスできるように、Nginx を設定したい、ということ。
で、こんなふうな設定ファイルを書いたんだけど、設定ファイルのテストが通らない。
upstream unicorn-lcstorage { # server unix:/var/run/unicorn/unicorn_lcstorage.sock; server 127.0.0.1:8080; } server { # port listen 80; # server name server_name storage1.lathercraft.net; # document root root /home/lcstorage/lcstorage; # index #index index.php index.html index.htm; # log files access_log /var/log/nginx/storage1.lathercraft.net/access.log main; error_log /var/log/nginx/storage1.lathercraft.net/error.log warn; keepalive_timeout 600; proxy_connect_timeout 600; proxy_read_timeout 600; proxy_send_timeout 600; client_max_body_size 8G; location / { #root /home/lcstorage/lcstorage; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://unicorn-lcstorage; } }
takatoh@nightschool $ sudo /etc/init.d/nginx configtest * Testing nginx configuration [fail]
アプリ自体は 8080 番ポートで動いていることを確認済み。上の設定ファイルのリンクを /etc/nginx/sites-enabled から削除すると、テストが OK になるのも確認済み。なので、この設定ファイルが問題なのは間違いないと思うんだけど、一体どこが間違ってるのかわからない。
誰か、なにか気づいたら教えてください。
まずは専用のユーザーを作る。
takatoh@nightschool $ sudo adduser sombrero ユーザー `sombrero' を追加しています... 新しいグループ `sombrero' (1001) を追加しています... 新しいユーザー `sombrero' (1001) をグループ `sombrero' に追加しています... ホームディレクトリ `/home/sombrero' を作成しています... `/etc/skel' からファイルをコピーしています... 新しい UNIX パスワードを入力してください: 新しい UNIX パスワードを再入力してください: passwd: パスワードは正しく更新されました sombrero のユーザ情報を変更中 新しい値を入力してください。標準設定値を使うならリターンを押してください フルネーム []: sombrero 部屋番号 []: 職場電話番号 []: 自宅電話番号 []: その他 []: 以上で正しいですか? [Y/n] Y
新しいユーザー sombrero に sudo する権限をつける。
takatoh@nightschool $ sudo gpasswd -a sombrero sudo [sudo] password for takatoh: ユーザ sombrero をグループ sudo に追加
ユーザー sombrero でログインしなおして、Ruby と Git のバージョンを確認。
sombrero@nightschool:~$ ruby -v ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux] sombrero@nightschool:~$ git --version git version 1.9.1
GitHub から Sombrero を clone。
sombrero@nightschool:~$ git clone [email protected]:takatoh/sombrero.git Cloning into 'sombrero'... Warning: Permanently added the RSA host key for IP address '192.30.252.128' to the list of known hosts. remote: Reusing existing pack: 903, done. remote: Total 903 (delta 0), reused 0 (delta 0) Receiving objects: 100% (903/903), 282.66 KiB | 131.00 KiB/s, done. Resolving deltas: 100% (577/577), done. Checking connectivity... done.
必要なライブラリをインストール。
sombrero@nightschool:~$ cd sombrero sombrero@nightschool:~/sombrero$ sudo bundle install [sudo] password for sombrero: Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root users on this machine. Fetching gem metadata from https://rubygems.org/.......... Fetching additional metadata from https://rubygems.org/.. Resolving dependencies... Installing tilt 1.4.1 Installing haml 4.0.5 Using httpclient 2.4.0 Installing rack 1.5.2 Installing rack-protection 1.5.3 Installing sass 3.3.9 Installing sequel 4.12.0 Installing sinatra 1.4.5 Installing sqlite3 1.3.9 Using bundler 1.6.3 Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed. Post-install message from haml: HEADS UP! Haml 4.0 has many improvements, but also has changes that may break your application: * Support for Ruby 1.8.6 dropped * Support for Rails 2 dropped * Sass filter now always outputs <style> tags * Data attributes are now hyphenated, not underscored * html2haml utility moved to the html2haml gem * Textile and Maruku filters moved to the haml-contrib gem For more info see: http://rubydoc.info/github/haml/haml/file/CHANGELOG.md
もともと運用していたディレクトリからアプリの設定ファイルをコピー。
sombrero@nightschool:~/sombrero$ cp /home/takatoh/w/sombrero/config.yaml .
データベースのマイグレーションを実行。
sombrero@nightschool:~/sombrero$ rake db:migrate プログラム 'rake' はまだインストールされていません。 次のように入力することでインストールできます:
rake が入ってなかった。インストール。
sombrero@nightschool:~/sombrero$ sudo gem install rake Fetching: rake-10.3.2.gem (100%) Successfully installed rake-10.3.2 1 gem installed Installing ri documentation for rake-10.3.2... Installing RDoc documentation for rake-10.3.2...
もともとの運用元から、データベースファイルをコピー(上書き)。
sombrero@nightschool:~/sombrero$ sudo cp /home/takatoh/w/sombrero/db/sombrero.db db
ここでいったん、アプリが正常に起動するか確認。
sombrero@nightschool:~/sombrero$ rackup app.ru --port 9000
OK。
Unicorn のインストール。
sombrero@nightschool:~/sombrero$ sudo gem install unicorn [sudo] password for sombrero: Fetching: kgio-2.9.2.gem (100%) Building native extensions. This could take a while... Fetching: raindrops-0.13.0.gem (100%) Building native extensions. This could take a while... Fetching: unicorn-4.8.3.gem (100%) Building native extensions. This could take a while... Successfully installed kgio-2.9.2 Successfully installed raindrops-0.13.0 Successfully installed unicorn-4.8.3 3 gems installed Installing ri documentation for kgio-2.9.2... Installing ri documentation for raindrops-0.13.0... Installing ri documentation for unicorn-4.8.3... Installing RDoc documentation for kgio-2.9.2... Installing RDoc documentation for raindrops-0.13.0... Installing RDoc documentation for unicorn-4.8.3...
いろいろググった結果を見ると Unicorn の前に nginx をたてるのが普通のようだけど、今回は Unicorn のみで行く。公式サイト(?)によれば、アプリのルートディレクトリで unicorn と打てば起動するらしい。
sombrero@nightschool:~/sombrero$ unicorn /var/lib/gems/1.9.1/gems/unicorn-4.8.3/lib/unicorn/configurator.rb:659:in parse_rackup_file': rackup file (config.ru) not readable (ArgumentError) from /var/lib/gems/1.9.1/gems/unicorn-4.8.3/lib/unicorn/configurator.rb:77:in reload' from /var/lib/gems/1.9.1/gems/unicorn-4.8.3/lib/unicorn/configurator.rb:68:in initialize' from /var/lib/gems/1.9.1/gems/unicorn-4.8.3/lib/unicorn/http_server.rb:100:in new' from /var/lib/gems/1.9.1/gems/unicorn-4.8.3/lib/unicorn/http_server.rb:100:in initialize' from /var/lib/gems/1.9.1/gems/unicorn-4.8.3/bin/unicorn:126:in new' from /var/lib/gems/1.9.1/gems/unicorn-4.8.3/bin/unicorn:126:in new' from /usr/local/bin/unicorn:23:in load' from /usr/local/bin/unicorn:23:in main'
あれ、ダメだ。あ、rackup のファイルが config.ru じゃなきゃだめなのか。引数に与えてみるか。
sombrero@nightschool:~/sombrero$ unicorn app.ru I, [2014-07-26T09:26:00.893170 #19156] INFO -- : listening on addr=0.0.0.0:8080 fd=7 I, [2014-07-26T09:26:00.893297 #19156] INFO -- : worker=0 spawning... I, [2014-07-26T09:26:00.893751 #19156] INFO -- : master process ready I, [2014-07-26T09:26:00.894064 #19158] INFO -- : worker=0 spawned pid=19158 I, [2014-07-26T09:26:00.894233 #19158] INFO -- : Refreshing Gem list I, [2014-07-26T09:26:01.337048 #19158] INFO -- : worker=0 ready
今度は無事起動。ポート8080で待機している。今までどおり 9000番ポートで動かすには –port 9000 をオプションとしてつけてやればいいようだ。
Unicorn の設定ファイル unicorn.conf を書く。
listen "9000" worker_processes 1 pid "./unicorn.pid" stderr_path "./unicorn.log" stdout_path "./unicorn.log"
どうも rackup するファイルは設定できないみたいだ。でも、unicorn コマンドの引数に与えてやれば、これで起動してみると、ちゃんと起動しているのが確認できた。
sombrero@nightschool:~/sombrero$ unicorn app.ru -c unicorn.conf
さて、今度はPCを起動したら自動で起動するようにする。それには /etc/init.d 配下に起動用のスクリプトを置く。
#!/bin/sh PATH=/sbin:/usr/local/bin:/usr/bin SOMBRERO_ROOT=/home/sombrero/sombrero case "$1" in start) cd ${SOMBRERO_ROOT} unicorn app.ru -c unicorn.conf -D ;; stop) PID=`cat ${SOMBRERO_ROOT}/unicorn.pid` kill -QUIT ${PID} ;; *) echo "Usage: sombrero {start|stop}" >&2 exit 1 ;; esac exit 0
unicorn についてる -D オプションはデーモン化するためのもの。
で、これをデーモン(サービス)として起動するには、OS のランレベルに応じた /etc/rc?.d フォルダの中に ‘S’ で始まるファイル名でソフトリンクを作ってやればいいらしい。もっとも、この部分は sysv-rc-conf というツールを使うのが通例のようだ。
それじゃ、まずランレベルの確認。
sombrero@nightschool:~$ runlevel N 2
N が以前のランレベルで、2が現在のランレベルを示しているらしい。以前のランレベルってなんだかわからないけど今回はパス。とにかく現在のランレベルが 2 だということがわかった。
つぎ、sysv-rc-conf のインストール。
sombrero@nightschool:~$ sudo apt-get install sysv-rc-conf
で、この sysv-rc-conf を sudo つきで起動すると下のような画面になる。
よくわからないけど、sombrero の行の 2 のカラムのところに X 印をつけて保存して終了。
/etc/rc2.d フォルダを確認してみると、S20sombrero という名前でファイル(ソフトリンク)ができているのが確認できる。
sombrero@nightschool:~$ ls -l /etc/rc2.d 合計 4 -rw-r--r-- 1 root root 677 3月 13 10:42 README lrwxrwxrwx 1 root root 20 7月 5 14:26 S20kerneloops -> ../init.d/kerneloops lrwxrwxrwx 1 root root 15 7月 5 14:26 S20rsync -> ../init.d/rsync lrwxrwxrwx 1 root root 18 7月 26 11:58 S20sombrero -> ../init.d/sombrero lrwxrwxrwx 1 root root 27 7月 5 14:26 S20speech-dispatcher -> ../init.d/speech-dispatcher lrwxrwxrwx 1 root root 15 7月 5 14:26 S50saned -> ../init.d/saned lrwxrwxrwx 1 root root 19 7月 5 14:26 S70dns-clean -> ../init.d/dns-clean lrwxrwxrwx 1 root root 18 7月 5 14:26 S70pppd-dns -> ../init.d/pppd-dns lrwxrwxrwx 1 root root 21 7月 5 14:26 S99grub-common -> ../init.d/grub-common lrwxrwxrwx 1 root root 18 7月 5 14:26 S99ondemand -> ../init.d/ondemand lrwxrwxrwx 1 root root 18 7月 5 14:26 S99rc.local -> ../init.d/rc.local
さあ、これで OK のはずだ。果たして PC を再起動してみると、自動的に起動しているのが確認できた。
今日はここまで。
何を今更、というようなタイトルだけど、どういうことかというと、今までランチャーから新しい端末(コンソール)を起動しただけでは rvm でインストールした Ruby 2.1.1 を使えていなかったのだ。なぜなら、rvm を有効にする設定が .bash_profaile に書かれているのに対して、新しい端末を開いてもこのファイルを読み込まないらしい、からだった。
だから、今までどうしていたかというと、端末を開いたあとに、source .bash_profile
とか bash --login
とかやってたわけだ。さすがにこれはめんどくさい(実際には端末を開きっぱなしなのでそれほどでもない)。そこで、重い腰を上げて解決することにした。
いろいろ調べてみると、新しい端末を開くと、.bashrc は読み込んでくれるらしい。ということは、.bash_profile に書いてある該当箇所を .bashrc に書き写せばいいはず。.bash_profile の該当箇所はこれ。
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
ところが、これをこのまま .bashrc に書き写しても動かない。どうしてかというと、Ubuntu の sh は bash じゃなくて dash というシェルだから。
takatoh@nightschool $ which sh /bin/sh takatoh@nightschool $ ls -al /bin/sh lrwxrwxrwx 1 root root 4 7月 5 14:26 /bin/sh -> dash
どうも dash では [[ … ]] という書式をサポートしていないらしい。というわけで、.bashrc の他の記述を参考に次のように書き換えた。
if [ -s "$HOME/.rvm/scripts/rvm" ]; then source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function* fi
これで、新しい端末で最初から Ruby 2.1.1 が使えるようになった。
takatoh@nightschool $ ruby -v ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux]
ここの記事が参考になった。
cf. ubuntuによるポート開放について – YAHOO! JAPAN 知恵袋
ufw というツールを使うといいらしい。まずはインストール。
takatoh@nightschool $ sudo apt-get install ufw [sudo] password for takatoh: パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 ufw は既に最新バージョンです。 アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 7 個。
すでに入ってたみたい。
状態を確認。
takatoh@nightschool $ sudo ufw status 状態: 非アクティブ
有効化。
takatoh@nightschool $ sudo ufw enable ファイアウォールはアクティブかつシステムの起動時に有効化されます。 takatoh@nightschool $ sudo ufw status 状態: アクティブ
無効化するには sudo ufw disable
。
デフォルトはすべて拒否。
takatoh@nightschool $ sudo ufw default DENY デフォルトの incoming ポリシーは 'deny' に変更しました (適用したい内容に基づいて必ずルールを更新してください)
Rails の development 環境で動かしてるアプリにアクセスするため、3000番のポートを開ける。
takatoh@nightschool $ sudo ufw allow 3000/tcp ルールを追加しました ルールを追加しました (v6)
これでOK。