Vagrantでインストールしたboxファイルの行方
Vagrantを使って環境を作っていたんだけど、そういえばvirtualboxのboxファイルをインストールするときに
$ vagrant box add centos6.3 https://dl.dropbox.com/u/7225008/Vagrant/CentOS-6.3-x86_64-minimal.box
というようにboxファイルをインストールするんだけど、このboxファイル(イメージファイル?)ってどこにインストールされるんだろうとおもってディレクトリを漁っていたら、~/.vagrant.d/配下にインストールされていた
$ tree ~/.vagrant.d /Users/tadasy/.vagrant.d ├── boxes │ ├── centos6.3 │ │ └── virtualbox │ │ ├── Vagrantfile │ │ ├── box-disk1.vmdk │ │ ├── box.ovf │ │ └── metadata.json │ └── scientificlinux-6 │ ├── Vagrantfile │ ├── box-disk1.vmdk │ └── box.ovf ├── data ├── gems ├── insecure_private_key ├── rgloader │ └── loader.rb ├── setup_version └── tmp ├── box1363317853 ├── box1363317977 └── box1363317982
~/.vagrant.d/boxes/centos6.3/virtualbox/box-disk1.vmdk
どうやらこれっぽいですね。
変更した複数のphpファイルのシンタックスチェック
複数のPHPファイルに対して、いろいろ修正を加えたんだけど、とりあえずシンタックスチェックくらいは一気にやりたかったのでshellでまるっとチェックした。
対象はsubversionで管理されているので、変更したファイル(M)のファイルだけチェックした。
$ cd target_dir $ for i in `svn st | awk '$1 == "M"{print $2}'`; do php -l $i; done
なんてことはないメモ
SQLのreplace関数が便利
とあるカラムの文字列を一括して置換したいときはreplace関数が便利。
たとえば、hoge_tableのcol1に入っている文字列の'foo'を'bar'に置換したいときは
update hoge_table set col1 = replace(col1, 'foo', 'bar');
とすると一括で更新できる。
調べるとOracle,MySQL,Postgresql,SQLiteで使えるようだ。SQL99に準拠しているかは調べてない。
ただ、oracleでしか試してないけど、検索文字にマッチしないレコードも、データはかわらないけどupdateされるっぽい。
なので、where句で対象を絞るなりしないと全行ロックかかってしまう気がするので、更新処理などは気にしたほうがよさそうです。
ちなみに
OracleとPostgresqlはREGEXP_REPLACEという関数があって、正規表現を使った置換ができるそうです。
http://www.shift-the-oracle.com/sql/functions/regexp_replace.html
http://www.postgresql.jp/document/8.3/html/functions-matching.html#FUNCTIONS-POSIX-REGEXP
※Oracleは10gからだそうで。
さくらのVPSを借りて、真っ先に設定した内容まとめ
ついカッとなってさくらのVPSを借りたので、借りてすぐにやったことのメモ
ちなみにディストリビューションはCentOS 6を選択しました。
rootのパスワード変更
契約時はrootしかアカウントがないので、とりあえずrootでログインし、rootのパスワードを変更しておく。sshで接続するときは登録時に発行されたIPアドレスで。
mac$ ssh -l root xxx.xxx.xxx.xxx
root$ passwd
作業用ユーザー作成
rootで作業とかマジ怖いので、取り急ぎ作業用のアカウントを作成し、パスワードも設定
root$ adduser myuser root$ passwd myuser
sudoの設定
rootで作業しないようにとりあえずsudoの設定。以下を追記。
root$ visudo ... myuser ALL=(ALL) ALL # これを追記 ...
ほんとはもう少しきちんと権限設定をした方がいいと思うけど、とりあえず良しとする。
sshdの設定変更
もろもろ変更したり追記したり
$ sudo vi /etc/ssh/sshd_config ... # rootで直接sshで接続できないようにする PermitRootLogin no # sshのポート番号を変える(番号は内緒) Port XXXXX # パスワードなしでのログイン禁止 PermitEmptyPasswords no ...
ここで一旦sshdを再起動
$ sudo /etc/init.d/sshd restart
sshでのログインを公開鍵認証にする
セキュリティおよび利便性向上のため、sshは公開鍵認証にする
.sshディレクトリの作成
~/.ssh/authorized_keysに公開鍵を記述(追記)するので、.sshディレクトリを作っておく
$ mkdir ~/.ssh # パーミッションは700で。 $ chmod 700 ~/.ssh
鍵を作る
僕はmacなのでmacのツールを使いました。鍵の置き場所を聞かれるので、テキトな箇所に作る。とりあえずmysakura_rsaを作る
mac$ ssh-keygen Enter file in which to save the key (/Users/hoge/.ssh/id_rsa): /Users/hoge/.ssh/mysakura_rsa
できた公開鍵をVPS側にscpなどで持っていく
mac$ scp -P XXXXX ~/.ssh/mysakura_rsa.pub myuser@xxx.xxx.xxx.xxx:/home/myuser/.ssh/
公開鍵をauthorized_keysに設定する
$ cd ~/.ssh $ cat mysakura_rsa.pub >> authorized_keys # パーミッションは600 $ chmod 600 authorized_keys
sshdの編集
$ sudo vi /etc/ssh/sshd_config ... # 鍵認証許可 PubkeyAuthentication yes # 鍵のファイル AuthorizedKeysFile .ssh/authorized_keys # パスワード認証を無効化 PasswordAuthentication no ...
sshd再起動
$ sudo /etc/init.d/sshd restart
確認
鍵無しでログインを試みる
$ ssh -l myuser -p XXXXX xxx.xxx.xxx.xxx Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
ついでに
作業用のmacの.ssh/configを設定しておく
mac$ vi ~/.ssh/config Host mysakura HostName xxx.xxx.xxx.xxx Port XXXXX IdentityFile ~/.ssh/mysakura_rsa User myuser
なぜこれをしているかというとVPSにログインするときに
mac$ ssh mysakura
でログインできるから。alias切ればいいじゃんという話はあるけどscpしたりするときも
mac$ scp hoge.txt mysakura:~/
とか書けて便利なのです。
iptables
SSHの設定が終わったらiptablesの設定をして、とりあえず完了とする。
https://gist.github.com/tadasy/5099635
こんな感じのshellを作って実行しておしまい。
基本方針としては SSH, HTTP, HTTPS 以外のポートは閉じる くらい。
インターネッツの荒波に揉まれるので、必要なポート以外は閉じておく。
ここまでで初期設定はおわり。
あとは好きな言語をいれたり、ミドルウェアを入れたりぼちぼち進めていく。
おやすみなさい
mysqlで全テーブルのカラム一覧を見たい
情弱メモ。
mysqlでテーブル一覧とかカラム一覧とかを見るときは
/* テーブル一覧 */ mysql> show tables; /* カラム一覧 */ mysql> desc <table_name>;
みたいにやるんだけど、mysqlコマンドではなくて、sqlで確認したいときは
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | projectdb | | test | +--------------------+
で表示されるinformation_schemaというDBにいろんな情報が入ってるので、このDBを使うと良い。
information_schemaのテーブル一覧を見ると
mysql> use information_schema; mysql> show tables; +---------------------------------------+ | Tables_in_information_schema | +---------------------------------------+ | CHARACTER_SETS | | COLLATIONS | | COLLATION_CHARACTER_SET_APPLICABILITY | | COLUMNS | | COLUMN_PRIVILEGES | | ENGINES | | EVENTS | | FILES | | GLOBAL_STATUS | | GLOBAL_VARIABLES | | KEY_COLUMN_USAGE | | PARAMETERS | | PARTITIONS | | PLUGINS | | PROCESSLIST | | PROFILING | | REFERENTIAL_CONSTRAINTS | | ROUTINES | | SCHEMATA | | SCHEMA_PRIVILEGES | | SESSION_STATUS | | SESSION_VARIABLES | | STATISTICS | | TABLES | | TABLESPACES | | TABLE_CONSTRAINTS | | TABLE_PRIVILEGES | | TRIGGERS | | USER_PRIVILEGES | | VIEWS | | INNODB_CMP_RESET | | INNODB_TRX | | INNODB_CMPMEM_RESET | | INNODB_LOCK_WAITS | | INNODB_CMPMEM | | INNODB_CMP | | INNODB_LOCKS | +---------------------------------------+
こんな感じのテーブル一覧があるので、TABLESとかCOLUMNSとかのテーブルを使って調べれば良い。
たとえば、「projectdb」というDBの全テーブルのカラム一覧を表示したいなら
mysql> desc COLUMNS; +--------------------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------------------+---------------------+------+-----+---------+-------+ | TABLE_CATALOG | varchar(512) | NO | | | | | TABLE_SCHEMA | varchar(64) | NO | | | | | TABLE_NAME | varchar(64) | NO | | | | | COLUMN_NAME | varchar(64) | NO | | | | | ORDINAL_POSITION | bigint(21) unsigned | NO | | 0 | | | COLUMN_DEFAULT | longtext | YES | | NULL | | | IS_NULLABLE | varchar(3) | NO | | | | | DATA_TYPE | varchar(64) | NO | | | | | CHARACTER_MAXIMUM_LENGTH | bigint(21) unsigned | YES | | NULL | | | CHARACTER_OCTET_LENGTH | bigint(21) unsigned | YES | | NULL | | | NUMERIC_PRECISION | bigint(21) unsigned | YES | | NULL | | | NUMERIC_SCALE | bigint(21) unsigned | YES | | NULL | | | CHARACTER_SET_NAME | varchar(32) | YES | | NULL | | | COLLATION_NAME | varchar(32) | YES | | NULL | | | COLUMN_TYPE | longtext | NO | | NULL | | | COLUMN_KEY | varchar(3) | NO | | | | | EXTRA | varchar(27) | NO | | | | | PRIVILEGES | varchar(80) | NO | | | | | COLUMN_COMMENT | varchar(1024) | NO | | | | +--------------------------+---------------------+------+-----+---------+-------+
このあたりのテーブルを使って
select TABLE_NAME, COLUMN_NAME from COLUMNS where TABLE_SCHEMA = 'projectdb';
などとすればそれらしき情報が取得できるようです。
androidのアイコン画像のサイズ
※下記の内容の認識が間違っていた。正しくは下の追記に書いた。
たまにはandroidの話。というかメモ。
androidのアイコン画像を置くときに
- drawable-hdpi
- drawable-ldpi
- drawable-mdpi
- drawable-xhdpi
あたりのディレクトリにそれぞれ画像を置くと解像度に適した画像を使ってくれるんだけど、それぞれどのサイズかよくわからんので、ググったら良い記事ありました。
http://yuki312.blogspot.jp/2012/02/blog-post.html
ldpiでは、3:4=x:100となり75px×75pxの画像をdrawable-ldpiに配置
mdpiでは、4:4=100:xとなり100px×100pxの画像をdrawable-mdpiに配置
hdpiでは、4:6=100:xとなり150px×150pxの画像をdrawable-hdpiに配置
xhdpiでは、4:8=100:xとなり200px×200pxの画像をdrawable-xhdpiに配置
とのこと。
たぶん覚えられないからメモメモ。
追記
上の内容は間違いがありました。記事をちゃんとみていない僕が悪いんですけど上の記事は100pxの画像をdpiにしたら何pxになるって話でアイコン画像とは関係ないみたいです。
というのを、今朝
http://blog.excite.co.jp/spdesign/19798730/
この記事をみてあれあれ?とおもって気がついた。
アイコン画像のサイズはこの記事がくわしい。てへへ。