ShellShock: サポート切れ Ubuntu 8.04 の bash にパッチを当てる

何と Ubuntu 8.04 のインストールされたサーバがまだ動いていました。

ShellShock に対応しようと思いましたが、Ubuntu 8.04 はサポート切れなので apt-get でアップデートはできません。

以下、手動でインストールする手順:


mkdir src && cd src
wget http://ftp.gnu.org/gnu/bash/bash-3.2.48.tar.gz
tar zxvf bash-3.2.48.tar.gz
cd bash-3.2.48

for i in $(seq -f "%03g" 49 52); do
wget -nv http://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-$i
patch -p0 < bash32-$i
done

./configure && make
sudo make install

sudo mv /bin/bash /bin/bash.old
sudo ln -s /usr/local/bin/bash /bin/bash

次のコマンドを実行して「vulnerable」と表示されなければOK:


env x='() { :;}; echo vulnerable' bash -c echo

参考資料:

Rails: モデルオブジェクトの特定の属性を選んで to_hash/to_json

今、ある Rails アプリケーションの User モデルクラスに id, name, email, created_at, updated_at という5つの属性があるとします。id = 1 の User オブジェクトに関して、name と email だけの値をハッシュまたはJSON文字列として返すにはどうすればいいでしょうか。

答え:

(1) ハッシュ化


u = User.find(1)
u.attributes.slice('name', 'email')

(2) JSON


u = User.find(1)
u.attributes.slice('name', 'email').to_json


u.attributes.slice('name', 'email') の代わりに u.attributes.except('id', 'created_at', 'updated_at') としても構いません。多くの属性の中から少数の属性だけを省きたい場合は、こちらの方が便利です。

Rails 4.1: Implicit join references were removed

Rails 4.0 から Rails 4.1 にアップグレードすると、次のような警告が出ることがあります。


DEPRECATION WARNING: Implicit join references were removed with Rails 4.1.
Make sure to remove this configuration because it does nothing.

config/application.rb 等に次のような記述が残っているためです。


config.active_record.disable_implicit_join_references = true

この記述は不要(implicit join references は Rails 4.1 で廃止)なので、消してください。

mysql: ERROR 1008 (HY000): Can't drop database 'test'; database doesn't exist

show databases では test が出てくるのに、drop できないという問題に遭遇。

なぜか、/var/lib/mysql/test の owner が mysql ではなく root になっていた。

とりあえず chown -R mysql:mysql /var/lib/mysql/test したら drop できるようになった。

Google Compute Engine: Ubuntu Server 14.04 LTS のイメージを登録する

2014年08月18日現在、残念ながら Google Compute Engine (GCE) の「イメージ」として Ubuntu を選択することはできません。

しかし、自分でイメージを作って登録すれば選べるようになります。

作り方は HOW TO INSTALL UBUNTU 14.04 LTS SERVER ON GCE に詳しく書いてあります。私は試していないのですが、たぶんうまく行くでしょう。

実は、既製のイメージも配布されていて、私はそちらを使いました。

イメージの登録は実に簡単。GCE のプロジェクト名を foo-bar-001 とすれば、次のコマンドを実行するだけです。


$ gcutil --project foo-bar-001 addimage ubuntu-14-04 gs://gcx-devops-images/ubuntu-14.04-image.tar.gz

ただし、他人が作った OS イメージをむやみに信用するのは危険です。配布者も「実運用環境では使うな」と言っています。

参考資料:

netbeans: プロジェクトウィンドウのエラーマークをリセットする方法(メモ)

NetBeans はファイルのパースエラーが解消した後も、エラーマークを表示し続けることがあります。

その場合は、NetBeans を終了し、キャッシュディレクトリを消して、再び NetBeans を起動すればエラーマークが消えます。

キャッシュディレクトリは、次の場所にあります。

foobarと8.0の部分は適宜読み替えてください。

参考文献:

サーバに設置したSSL証明書の確認(メモ)

サーバに設置したSSL証明書をターミナルから確認するコマンドは、次の通り:


openssl s_client -CApath /etc/ssl/certs -connect example.com:443 < /dev/null

OKな場合の結果:


Verify return code: 0 (ok)

NGな場合の結果の一例:


Verify return code: 21 (unable to verify the first certificate)