Debian Tips

Debianに特化したTipsを書いています。

パッケージ関連

aptitudeにあるタスクをコマンドラインからインストールするには、tasksel-dataパッケージに入ってるdebian-tasks.desc(/usr/share/tasksel/debian-tasks.desc)に書いてあるタスク名を指定してインストールします。

以下のようにすると日本語関係のパッケージと日本語デスクトップ環境がコマンドラインからインストールできます。

# aptitude install japanese japanese-desktop

snapshot.debian.orgで昔のリポジトリを使おうとしたとき、こういうメッセージが出る場合があります。

E: Release ファイルが期限切れになっているので、http://snapshot.debian.org/archive/debian/20110203T210912Z/dists/sid/InRelease を無視します (12日 12時間 30分 51秒 以来無効)

そんなときはオプションで

$ sudo aptitude -o 'Acquire::Check-Valid-Until=false'

のようにすると古いリポジトリを利用することができます。

野良リポジトリを追加してapt-get updateをすると以下のように警告されます。

W: GPG error: http://xxx.example.com example Release: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 1234567890ABCDEF
W: これらの問題を解決するためには apt-get update を実行する必要があるかもしれません

その場合は公開鍵を追加します。

gpg --keyserver pgp.nic.ad.jp --recv-keys (無いと言われた鍵)
gpg --armor --export (無いと言われた鍵) | apt-key add -

Debian Liveを作ってて大量にパッケージを取得する必要があるけど、cacheを作ってくれるから、ま、いっかーと放置していました。 しかし、エラーの加減でたまにcacheがヘンになることがあるので、apt-cacherの設定をしてみた。

インストール

# aptitude install apt-cacher

サーバー側の設定

$ sudo vi /etc/apt-cacher/apt-cacher.conf

とりあえず変更するのは、allowed_hostsぐらいかな。 clean_cacheexpire_hoursはお好みに応じて変更。

$ sudo vi /etc/default/apt-cacher

AUTOSTARTを0から1に変更しておくこと。

クライアントの設定

apt-lineのアドレスにapt-cacherのあるアドレスを書けばいいらしいけど、そんなことタルくてできないので、/etc/apt/apt.conf.d/01proxy なんてファイルを作って

Acquire::http::Proxy "http://(apt-cacherマシンのIP/ホスト名):3142";

と書いて普通に使っているとキャッシュがためられます。

/etc/apt/apt.confに以下の設定を追記します。

APT::Install-Recommends "false";

参考: APT HOWTO - とても便利な補助プログラム

debianでダミーパッケージやメタパッケージを作るにはequivsを使います。

使い方は

equivs-control <パッケージ名>

で、パッケージ名と同じファイルができるのでこれを編集して依存関係を書いていきます。 書き終われば

equivs-build <パッケージ名>

でパッケージを作成します。

equivs-build -f <パッケージ名>

でパッケージ以外の一式、ファイルが生成されます。

debianパッケージ作りに試行錯誤しているとき、何度も同じソースをコンパイルするのでccacheでコンパイルが早くなればと思うことがしばしばあります。 そういうときはccacheのパスが通っている事を確認

export PATH="/usr/lib/ccache:$PATH"

してから

debuild -e PATH -us -uc

とするとPATHが上書きされないのでccacheを利用することができます。

この作り方は手抜きですが、きちんと作りこめばここからまともなDebianパッケージを作ることができます。 まともにしたい方はDebian 新メンテナガイドCDBS Documentationを読んでください。

手順

  1. ソースを展開して、展開したソースディレクトリを(パッケージ名)-(バージョン)のようにリネーム。
  2. 展開したソースのディレクトリに降りてdh_make -b -rを実行。
  3. debianディレクトリができているので、その中にあるrulesファイルを例のように編集する。
  4. debuild -us -ucを実行するとひとつ上のディレクトリにパッケージができあがる。

debian/rulesの編集例

DEB_CONFIGURE_EXTRA_FLAGS以外は自動的に作られます。

#!/usr/bin/make -f
include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/autotools.mk
# Add here any variable or target overrides you need.
DEB_CONFIGURE_EXTRA_FLAGS := (configureのオプションが必要なら、この行を追加して書く。)

ネットワーク・サーバー関連

exim4のスマートホストを使ってgmailにリレーするように設定してみた。

debconfを使ってexim4の設定する。

# dpkg-reconfigure exim4-config

debconfの設定は以下のとおり。

メール設定の一般的なタイプ: スマートホストでメール送信SMTP または fetchmail で受信する
システムメール名: (自分のマシン名)
入力側SMTP接続をリスンするIPアドレス: 127.0.0.1
メールを受け取るその他の宛先: (空にする)
メールをリレーするマシン: (空にする)
送出スマートホストのIPアドレスまたはホスト名: smtp.gmail.com::587
送出するメールでローカルメール名を隠しますか: いいえ
DNSクエリの数を最小限に止めますか(ダイヤルオンデマンド): いいえ
ローカルメールの配送方式: お好みで。わからなければ「mbox形式」
設定を小さなファイルに分割しますか: お好みで。わからなければ「いいえ」

passwd.clientにgmailのアカウントとパスワードを設定

Debian Wikiそのまんま。/etc/exim4/passwd.clientの末尾にアカウント(例ではyourAccountName@gmail.com)、パスワード(例ではy0uRpaSsw0RD)を設定。

# editor /etc/exim4/passwd.client
gmail-smtp.l.google.com:yourAccountName@gmail.com:y0uRpaSsw0RD
*.google.com:yourAccountName@gmail.com:y0uRpaSsw0RD
smtp.gmail.com:yourAccountName@gmail.com:y0uRpaSsw0RD

passwd.client のユーザーとグループが root:Debian-exim になっているのを確認して、update-exim4.conf を実行しておしまい。 これでローカルホストに投げるだけでgmailにメールを送ることができた。

セキュリティ上の理由から、デフォルトの状態ではユーザーディレクトリでPHPスクリプトを動かせない設定になっています。 それを変更するには /etc/apache2/mods-available/php5.conf の以下の部分をコメントアウトします。

# To re-enable php in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
<IfModule mod_userdir.c>
    <Directory /home/*/public_html>
        php_admin_value engine Off
    </Directory>
</IfModule>

各ユーザーの権限でsuexecを使うにはapache2-suexec-customパッケージを使います。 apache2-suexecパッケージはsuexec docrootが/vaw/wwwのwww-dataユーザー決め打ちなので使いません。

# aptitude purge apache2-suexec
# aptitude install apache2-suexec-custom

a2enmodコマンドを使ってsuexecモジュールを有効にします。

# a2enmod
Your choices are: actions alias asis auth_basic auth_digest authn_alias authn_anon authn_dbd authn_dbm authn_default authn_file authnz_ldap authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cern_meta cgi cgid charset_lite dav dav_fs dav_lock dbd deflate dir disk_cache dump_io env expires ext_filter file_cache filter headers ident imagemap include info ldap log_forensic mem_cache mime mime_magic negotiation php5 proxy proxy_ajp proxy_balancer proxy_connect proxy_ftp proxy_http proxy_scgi reqtimeout rewrite setenvif speling ssl status substitute suexec unique_id userdir usertrack version vhost_alias
Which module(s) do you want to enable (wildcards ok)?
suexec ←suexecと入力

/etc/apache2/suexec/www-dataというファイルをユーザーの環境に合わせて編集します。

コメントに書いてあるとおり、1行目はsuexecを動かすDocument Rootディレクトリ(suexec-docroot)です。 2行目はCGIを動かすユーザーのディレクトリです。 (コメントは無視しないので、1行目、2行目の位置は絶対です。) 初期設定では/var/wwwディレクトリ以下にある、public_html/cgi-binディレクトリにあるCGIをsuexecで動かす設定になっています。

これを/homeディレクトリにある、public_htmlディレクトリ以下にあるCGIをsuexecで動かすには以下のように変更します。

/home ←/var/wwwを/homeに
public_html/ ←public_html/cgi-binをpublic_html/に
# The first two lines contain the suexec document root and the suexec userdir
# suffix. Both features can be disabled separately by prepending a # character.
# This config file is only used by the apache2-suexec-custom package.

apache2を再起動します。

# invoke-rc.d apache2 reload

/etc/my.cnfの設定を忘れるのでメモ。

WordPressなどで絵文字がぶった切られるということで、4バイトUTF-8をサポートしているutf8mb4に設定すると良いようです。
character-set-server = utf8mb4

DebuabのMySQLパッケージをインストールしたばかりの状態のデフォルト文字コードは、latin1になってます。

$ mysql -u root -p

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.5.28, for debian-linux-gnu (i686) using readline 6.2

Server characterset:    latin1 ← latin1になってる
Db     characterset:    latin1 ← latin1になってる
Client characterset:    utf8
Conn.  characterset:    utf8
--------------

ということで変更します。

DebianのMySQL設定のポイントは /etc/mysql/my.cnf を直接いじらない。 設定は /etc/mysql/my.cnf から /etc/mysql/conf.d/ 以下がインクルードされて上書きされるようになっているので、/etc/mysql/conf.d/以下に lang.cnf などの名前のファイルを作成しその中に書きます。

[mysqld]
character-set-server = utf8

/etc/mysql/conf.d/lang.cnfに設定を書いたら、MySQLを再起動( service mysql restart )して、mysqlコマンドで変わっているか確認します。

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.5.28, for debian-linux-gnu (i686) using readline 6.2

Server characterset:    utf8 ← utf8になった
Db     characterset:    utf8 ← utf8になった
Client characterset:    utf8
Conn.  characterset:    utf8
--------------

デスクトップ関連

Debianでnouveauの対応ビデオカードリストに載っているにもかかわらず3Dが使えない場合は、libgl1-mesa-dri-experimentalパッケージを入れると使えます。

/usr/share/doc/ccache/README.Debianの転載。

何度も同じソースをコンパイルするときに威力を発揮するccachですが、debianではパスを設定すると有効になります。 .bashrcなどに以下の設定を書いておきます。

export PATH="/usr/lib/ccache:$PATH"

debianにはバグ報告ツールとしてreportbugというものがありますが、バグ報告メールを直接メールサーバーを利用して送信します。 その送信するメールサーバーにgmailのSMTPサーバーを設定して、送信する設定。

方法

  1. reportbug –configureで起動するとセットアップの質問されるので、MTAについて尋ねられたところで「No」と答えて一旦終了。
  2. ホームディレクトリに ~.reportbugrc というファイルができているので下のように書き加える。
# name and email setting (if non-default) (名前とメールは設定されていなければ)
realname "(名前:英語で)"
email "(あなたのGmailアカウント名)@gmail.com"
# Send all outgoing mail via the following host
smtphost "smtp.gmail.com:587"
smtpuser "(あなたのGmailアカウント名)@gmail.com"
smtptls

あとは普通に

$ reportbug (バグを見つけたパッケージ名)

で起動してバグ報告を書けばバグレポートを送ることができます。

Debian固有な事

アーキテクチャを追加する。

# dpkg --add-architecture <arch>

amd64を使っててi386を追加する場合は

# dpkg --add-architecture i386

として、apt-get updateをする。削除するときはこう。

# dpkg --remove-architecture <arch>