Ubuntu 13.10, 14.04のLXCでDHCPの範囲を変更する。

デフォルトでは、サブネットのほぼ全てがDHCPに割り当てられる。静的なIPを割り当てるため、その範囲を変更するには、 /etc/default/lxc-netを編集すればよい。以下の例は、割り当てアドレスの先頭を10.0.3.100にする。
LXC_DHCP_RANGE="10.0.3.100,10.0.3.254"
その後、システムをリセットする。

なお、/etc/init/lxc-net.confを読むと、lxcbr0を一旦削除しないと再度、dnsmasqを起動されない模様。 少々面倒だが、次の様にすれば、リセットせずに反映できる。
  • すべてのコンテナを終了する
  • 次のコマンドでlxcbr0を削除
  • # ifconfig lxcbr0 down
    # brctl delbr lxcbr0
    
  • lxcの再起動
  • # initctl stop lxc
    # initctl start lxc
    
dnsmaqのオプションをが指定したとおりになっていれば成功。
# ps ax | grep lxc-dnsmasq 
 6097 ?        S      0:00 dnsmasq -u lxc-dnsmasq --strict-order --bind-interfaces --pid-file=/var/run/lxc/dnsmasq.pid --conf-file= --listen-address 10.0.3.1 --dhcp-range 10.0.3.100,10.0.3.254 --dhcp-lease-max=253 --dhcp-no-override --except-interface=lo --interface=lxcbr0 --dhcp-leasefile=/var/lib/misc/dnsmasq.lxcbr0.leases --dhcp-authoritative

X11 forwarding request failed on channel 0と表示されてsshでX11 forwardingできない時の対処法

sshに-vオプションをつけて、詳細を表示させ、原因を探る。 以下のようにauth programがないと言われている場合、xauthをaptなりyumでインストールすればよい。
...
debug1: Remote: No xauth program; cannot forward with spoofing.
X11 forwarding request failed on channel 0

Linuxで不良セクタを検出して登録する

/dev/sdb1に対して、不良セクタの検出を行い、ファイルシステムにそれを登録する例。
# fsck -c /dev/sdb1
もしくは、不良セクタの情報をファイルに書き出し、それをfsckに読み込ませる。
# badblocks -vs -o sdb1.badblocks /dev/sdb1
# fsck -l sdb1.badblocks /dev/sdb1
badblocksの引数の-vは冗長な出力、-sは、進捗表示をそれぞれ意味する。

LXCのNICをOpen vSwitchに追加

ホストでOpen vSwitchのブリッジが作成されていることを前提に説明する。 ブリッジをovsbr0、LXCのコンテナが作るvethデバイスをveth-lxcとすると以下のように組み込めばよい。
# ovs-vsctl add-port ovsbr0 veth-lxc
特別なことは、ほとんどないが、以下の点に注意が必要。
  • LXCコンテナのvethでバイス名が固定していないと若干面倒
  • LXCコンテナを起動するときに、Linuxのbridgeに組み込む設定(lxc.network.link)があると、 lxc-startでエラーになる
これらを回避するには、LXCの基本的な使い方 の「設定ファイル」項目を参照して、適宜設定のこと。

OpenStackのCeilometerを使う

メータの一覧を見る。
# ceilometer meter-list
測定値を見る。下記のにはメータ一覧のName列に指定される値のいずれかを 指定する。
# ceilometer sample-list -m 
特定のリソースIDのものを抽出する場合、-qオプションを利用する。
# ceilometer sample-list -m cpu -q 'resource_id=9e571f72-fc21-42a5-8899-a87736dda57a'

あるコマンドが含まれるパッケージを検索する

Debin, Ubuntuなどdpkgベースの場合

-Sオプションを使用する。
$ dpkg -S /bin/ls
coreutils: /bin/ls

Fedora, CentOSなどRPMベースの場合

-qfオプションを指定
$ rpm -qf /bin/ls
coreutils-8.4-31.el6_5.1.x86_64

MacOSでスクリーンキャプチャ(スクリーンショット)を取得

下記のショートカットを使用。
キー キャプチャ範囲
command + shift + 3 全画面
command + shift + 4 マウスで選択した範囲

Mac OS Xでマウスのみスクロール方向を反対にする。

Mac OS X (Mavericks)では、タッチパッドとマウスのスクロール方向の設定が連動します。 タッチパッドは、「ナチュラル」設定のほうが使い易いと感じますが、マウスのスクロールについては、その設定では、 WindowsやLinuxのそれと反対方向になり、違和感があります。

フリーソフトのSCROLL REVERSERは、この問題を解決します。 このソフトは、タッチパッド、マウス、タブレットのスクロール方向を個別に設定することを可能にします。

インストールは、上記のサイトからダウンロードし、ファインダーなどでアプリケーションフォルダにコピー(ムーブ)すればOK。 起動すれば、下記のようにメニューバーに表示され、設定が可能なります。Start at Loginにチェックをしておけば、自動起動するので便利。

CentOSでBridgeインターフェイスを作成する

mybr0というブリッジをつくる例。

/etc/sysconfig/network-scripts/ifcfg-mybr0を作成する。 (青色の部分は、作成するブリッジの名前にする)
以下は、ファイル内容の例。ポイントは、TYPE=Bridgeを記述すること。
DEVICE=mybr0
BOOTPROTO=static
BROADCAST=192.168.118.255
GATEWAY=192.168.158.2
IPADDR=192.168.118.1
NETMASK=255.255.255.0
ONBOOT=yes
TYPE=Bridge

ブリッジを作成するには、再起動するか、以下のコマンドを実行する。
# ifup mybr0
ブリッジが作成できているかはifconfigコマンドで確認できる。また、次のコマンドで、ブリッジの構成について確認できる。 (なお、この例ではまだ、interfaceがブリッジに追加されていない)
# brctl show
bridge name     bridge id               STP enabled     interfaces
mybr0           8000.000000000000       no

SQLite3のsql_masterテーブルのカラム

SQLite3でテーブル一覧を得る方法ために、以下のようにsqlite_masterテーブルを利用できます。
> select * from sqlite_master;
table|t1|t1|2|CREATE TABLE t1(id integer primary key, a integer, b integer)
index|i_b|t1|4|CREATE INDEX i_b ON t1(b)
index|i_ab|t1|5|CREATE INDEX i_ab ON t1(a,b)
このテーブルのカラムは、左から、以下のようになっています。
カラム名 説明
type tableかindex
name テーブル名、または、インデックス名
tbl_name テーブル名
root_page -
sql そのテーブル(またはインデックス)を作るためのSQLステートメント
ですので、ちょっとした応用として、where句などで条件を与えれば、任意のテーブルの情報を得ることができます。 例えば、以下は、(indexでなく)tableのみを出力します。
> select * from sqlite_master where type='table';

mysqlのデータベースをメモリ(tmpfs)上に配置する。

/etc/mysql/my.confのdatadirを次のようにtmpfsがマウントされているディレクトリに変更する。
-datadir                = /var/lib/mysql
+datadir                = /dev/shm/mysql
新しいディレクトリにDBを作成するため、以下を実行する。
# mysql_install_db
そして、mysqldを起動する。
/etc/init.d/mysqld start
なお、mysql_install_dbで作成したファイルは、再起動したら消えてしまうので、 /etc/init.d/mysqldの最初に実行するように書いておくとよいかも。

注記

Ubuntuなどでは、apparmorによるアクセス制限がされている場合がある。 その場合、/etc/apparmor.d/usr.sbin.mysqldに次のような記述を追加する。
  /dev/shm/mysql/** rwk,

Ubuntuで自動起動するデーモンを設定する

sysv-rc-confというコマンドを使う。ない場合、下記のようにインストール。
# apt-get install sysv-rc-conf
その後、コマンド実行する。実行するデーモンには[X]印が表示される。スペースでON/OFFできる。

なお、終了するには、qキーを押す。

Ubuntu 13.10 / 14.04, CentOS6.5 / 6.6 / 7.0でパスワードなしでsudoする

ユーザfooをパスワードなしで、sudoできるようにするには、/etc/sudoersに以下に次の行を加える
foo ALL=(ALL) NOPASSWD:ALL
つぎのように%から始めると、グループで指定できる。
%admin ALL=(ALL) NOPASSWD:ALL
なお、sudoグループがに関する記述があると個別ユーザーやグループにNOPASSWDを追加しても、パスワードを要求される。その場合、以下のように%sudo行をコメントアウトする。
#%sudo ALL=(ALL:ALL) ALL
ただし、複数ユーザー環境では、他のユーザーがsudoできなくなる可能性があるの要注意。

LXCの基本的な使い方

以下のコマンドで-nオプションは省略できる場合が多い。

コンテナの作成

テンプレートをubuntu、コンテナ名をcontainer-nameとして作成する例。
# lxc-create -t ubuntu -n container-name
-tに使用するテンプレートは、/usr/share/lxc/templatesの下にある。

コンテナを起動

# lxc-start -n container-name

トラブルシュート

No croup mounted on the systemと表示される場合、/etc/fstabに次の記述をして、
none        /cgroup        cgroup        defaults    0    0
/cgroupsを以下のようにマウントする。
# mkdir /cgroup
# mount /cgroup

コンテナのコンソールを表示

# lxc-console -n container-name

コンテナのコンソールを終了

  • Ctrl-a + q
(Ctrl-a + Ctrl-qでないことに注意。qを入力する時は、Ctrlは押下されていない。)

コンテナの終了

# lxc-shutdown -n container-name

コンテナへのアタッチ

アタッチは、ログインを省略して、rootでコンテナの直接シェルを起動する。
# lxc-attach -n container-name

設定ファイル

設定ファイルは以下のひとつで、シンプル。
  • /var/lib/lxc/[container-name]/config

BridgeへのInterfaceの自動追加

以下の行の右辺にbridge名を設定。 なお、Bridgeの作り方については、こちらも参照。
lxc.network.link = lxcbr0

ホスト側のvethインターフェイス名

通常は適当な名前が付けられるので設定不要だが、明示することもできる。
lxc.network.veth.pair = veth-mycontainer