Ubuntuの時間ずれの解消

Ubuntuの時間がずれてます。7時なのに前日の22時になります。9時間遅れています。

参考:Ubuntu インストールしたらやること:時刻を同期するNTPサーバーを変更する

systemd-timesyncdの状態確認

$ systemctl status systemd-timesyncd
$ systemctl status ntp

ntpが有効になっていました。

systemd-timesyncdを有効化

$ systemctl stop ntp
$ systemctl start systemd-timesyncd

timesyncd.confの設定

$ vim /etc/systemd/timesyncd.conf

timesyncd.confの中身

[Time]
NTP=ntp.ring.gr.jp

systemd-timesyncdを再起動

$ systemctl restart systemd-timesyncd

これで直った。

GCPのCompute EngineのUbuntuでvsftpdを使う

Ubuntu17.04にvsftpdを入れてみる。vsftpdはFTPサーバ。

インストール

$ apt-get install vsftpd

GCPのポートあける

参考:Google Compute Engineのファイヤーウォールを理解する #gcpja

vsftpd.confの設定

参考:
vsftpサーバ 設定ガイド
Ubuntu 12.04 サーバー再構築(10) FTPの導入

$ vim /etc/vsftpd.conf

設定ファイルの内容

listen=YES
#listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
write_enable=YES

chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
allow_writeable_chroot=YES
#chown_uploads=YES

userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/vsftpd.user_list

secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd

FTP接続してみる

$ ftp localhost
$ ftp 123.123.123.123

yumでphpをアップデートする

このサーバのバージョンがなんだかわかりませんが、超phpが古くて5.1とかになってます。
yum remove phpってやったんですが、その後にyum install php53ってやったんですが、
エラーで競合、競合って書いてあってできません。
そこで、php関連のものを全部削除するといいよとどっかで見たんで、そうします。

yum remove php php-*

completeしましたので、改めてyum install php53てやってみます。
おおできた。

tmuxの設定・使い方

cnetos6.5です。macです。

tmuxをインストールします。

$ yum install tmux

tmuxを使います。

tmux new -s {session-name}

よく使うコマンド

  • ウインドウ一覧表示: ctr+b w
  • ウインドウ作成: ctr + b の後に c
  • ウインドウ移動: ctr + b の後に nまたはp
  • 画面分割 縦: ctr+b の後に “
  • 画面分割 横: ctr+b の後に %
  • 画面分割解除: ctr+b !
  • 画面の移動: ctr+b o
  • 画面の終了: ctr+b x
  • デタッチ: ctr+b d
  • アタッチ: tmux a

設定ファイルの読み込み
tmux -f ~/.tmux.conf

コピーモード
・tmux.confに下記を追記する

set-window-option -g mode-keys vi

・コピーモード開始 ctrl+b [

参考:
tmuxのインストールと設定
よく使うコマンド/tmux
tmux基本のコマンド
tmuxのコピーモードを試してみる

ディレクトリ内の全ファイルの置換

find . -type f | xargs sed -i -e s/hoge/hogehoge/g

macでillegal byte sequenceというエラーがでる場合は、下記をやる。

export LANG=C

追記:2014年2月14日

sedは、iオプションで上書き更新ができるが、上記コマンドを打つと-eという文字が後ろについたバックアップファイルが作成されてしまう。-i”.bak”とかってやると、.bak拡張しでバックアップができて、-iだけだとバックアップできないと思ってるんだけど、-eという文字列が後ろにくっついたファイルがバックアップとして作成されてしまっている。上記コマンドは-i -eとなってるので、この-eをバックアップファイルにくっつける文字列と勘違いしているのかもしれない。

とりあえず、-eとくっついたファイルが沢山できてしまったので、削除する場合は、下記のようにやる。

find app/View/. -name "*.ctp-e*"  -type f | xargs rm

これはcakePHPのviewファイルでctp拡張しの後ろに-eとついってしまっているものを全部削除している様。sedの処理を複数回やっていると、-e-e-eとかっていう残念なファイルが沢山できてしまったので、-e-e-eとかのファイルも全部削除している。

-i”” -eとかやっても、やはり-eという文字がくっついたバックアップファイルが作成されてしまう。仕方ないので、全ファイル置換してからバックアップファイル削除することにした。微妙だ。

Capitstranoでデプロイする度に、ユーザが登録している画像が消えると困る件

当然困ります。

http://www.slideshare.net/T2J/capistrano-tips-tips
このページの22ページに解決策が書いてあります。これがよさげ。

(ちなみに、僕は今時点よりちょっと古いCapistranoを使っております。3ではありません。)

cakePHPでapp/webroot内に画像フォルダを作っている場合、(app/webroot/uploadsなど)まず最新リリースのuploadsフォルダを、shared/system/uploadsにコピーします。
そして、今後はデプロイする度に、app/webroot/uploadsを、shared/system/uploadsフォルダのシンボリックリンクにする。
という感じにしたらいいらしい。

でも今全然正しくシンボリックリンクの設定ができてなかったのにdeployしても画像が共有されているのはなぜだろうか???
謎すぎる。

シンボリックリンクをcapistranoで作成するには、下記のような感じにした。

run "rm -rf #{latest_release}/app/webroot/uploads"
run "ln -nfs #{shared_path}/system/uploads #{latest_release}/app/webroot"

uploadsフォルダを削除してからじゃないとエラーになるので、最初に削除してから新たにシンボリックリンクを作成した。ln -nfsとあるが、nオプションは不要かも。というかfオプションも不要か削除してるし。

tmuxをmacで使う

tmuxを教えてもらった。
ターミナルが1つのタブで沢山の画面が使えるようになって、しかも沢山の画面全ての状態を保存しておいてくれる。

macにインストールするには、
brew install tmux
とやる。

結構インストールに時間かかる。
終わったと思ったらエラーがでている。

Warning: Could not link tmux. Unlinking...
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
You can try again using `brew link tmux'
Error: Permission denied - /usr/local/etc

sudoとかでbrew link tmuxとやってもできない。
/usr/localの所有者を自分に変更したらできた。
(sudo chown ore:ore /usr/local)

Tailコマンド

超便利なコマンド知った。

tailコマンド

cakePHPのerror.logとか毎回開くのめんどくさい。サーバのエラーログも。
tailコマンドは、ファイルの最新状態を監視して、新しいところを指定行数分リアルタイムに表示してくれるコマンド。

tail -n 30 -f error.log

といった感じで使う。

-fがリアルタイムにするオプションらしい。

SSH (Secure SHell) の仕組み

SSHとは、ネットワークを介して他のコンピュータに安全にアクセスする仕組み。
telnetは暗号化されてないので盗聴の危険性があるが、sshは暗号化されているので安全。

SSHはRSA暗号方式かDSA暗号方式のどちらかで暗号化した公開鍵と秘密鍵のペアを用いる。公開鍵は暗号化のみ可能であり、秘密鍵は復号のみを行う。暗号化のみ可能で復号ができない為、公開鍵は公開されても問題がない。公開鍵は公にして問題ないことから、複数のリモートコンピュータと接続する場合も、公開鍵・秘密鍵のペアは一つあればよい。

SSHを使って、リモートコンピュータにアクセスしようとする場合、アクセス元のコンピュータで公開鍵・秘密鍵のペアを作成し、公開鍵をリモートコンピュータに渡しておく必要がある。

リモートコンピュータに、公開鍵を渡した後で、ssh接続をしようとすると、

  • sshが、RSA認証プロトコルを使用する旨をリモートコンピュータに伝える。
  • すると、リモートコンピュータが、乱数を生成し、その乱数を渡された公開鍵を基に暗号化し送信してくる。
  • 接続元コンピュータは、受信した暗号を秘密鍵で復号し、復号結果をリモートコンピュータに送信する。
  • リモートコンピュータは受信した内容が生成した乱数と一致すれば、秘密鍵保有者であることが確認されたためアクセスを許す。

秘密鍵が他人に渡った場合あらゆるアクセス権限が渡ってしまうことになる為、秘密鍵作成時にはパスフレーズを登録すべき。これによって、万一他人に秘密鍵が渡っても、パスフレーズがない限りはそれを使用できない。

ただ、SSHで公開鍵・秘密鍵を利用する目的の一つにパスワード入力を不要にするという点があるが、パスフレーズを登録した場合、パスワードの代わりにパスフレーズの入力が必要となる為、その目的に合致しない。そこで、パスフレーズ入力を回避したい場合は、ssh-agentを利用する。macには、キーチェーンという仕組でパスフレーズ入力が回避できる。

#実際の公開鍵・秘密鍵の作成方法
cd ~/.ssh
ssh-keygen -t rsa

#作成した公開鍵をリモートコンピュータに渡す
scp id_rsa.pub ユーザ@リモートコンピュータのホスト:

#リモートコンピュータにログインする
ssh ユーザ@リモートコンピュータのホスト
パスワード入力
ログイン完了
cat id_rsa.pub >> ~/.ssh/authorized_keys
rm id_rsa.pub

また、/etc/hosts.allow、/etc/hosts.denyを編集することで、接続元を制限することができる。hosts.denyはhosts.allowよりも先に見られる。hosts.denyに、ALL:ALLと書くことで、「全てダメ」になる。hosts.allowに下記にように書くことで、記載した対象のみ接続可となる。

ALL : 127.0.0.1
ALL : 192.168.1.1

参考:
http://e-words.jp/w/ssh.html
http://www.atmarkit.co.jp/flinux/special/ssh/ssh.html
http://www.turbolinux.com/support/document/knowledge/152.html
SSH-KEYGEN
OpenSSH キー (鍵) の管理

Vim 使い方

x #文字を消す
r #文字を入れ替える
i #挿入モード

dd #行削除

0 #行頭移動
$ #行末移動
:0 #1行目に移動
:$ #最後の行に移動

:w #ファイル保存
:q #終了
:wq #保存して終了
:w! #強制保存
:q! #強制終了

/hogehoge #ファイル内検索(hogehogeを探す)
n #検索結果の次に移動

:set number #行番号表示

%s/hoge/moge/g 置換(開いているファイルのhogeを全てmogeに置換)