Tips や FAQ だとか



環境について

少しでもディスクを節約したい

  • localepurge をインストールしてみては

localepurge は使っていない他の言語の翻訳カタログや man を削除してくれます。 ただし一度削除してしまうと、元に戻すには

# dpkg-reconfigure localepurge

で設定し直すか localepurge 自体をアンインストール。 その上で翻訳カタログや man が含まれていたパッケージをすべて再インストールする必要があります。

# apt-get --reinstall install \
$(for i in /var/lib/dpkg/info/*.list; do basename $i .list; done | tr "\n" \ )

必要なものを間違えて削除対象にしてしまわないよう注意しましょう。

  • 翻訳されたパッケージ説明文のダウンロードを止めてみては
# echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/acquirelanguagenone
  • deborphan で使われていないパッケージを探してみては

deborphan はシステムの依存関係から孤立したパッケージを表示する事ができます。

$ deborphan --guess-all

$ deborphan -a

で表示されたパッケージで使っていないものを削除。

  • 使っていないフォントを削除してみては
$ dpkg -l | grep -E "fonts-|ttf-|otf-"

使っていないフォントがあれば削除。

  • ext2/3/4 の予約ブロックを縮めてみては

ext2/3/4 には各パーティションごとに 5% のディスクが root などのために予約されています。 その領域を 5% から 1% に縮めると 4% 分ディスクに空きが増えます。

予約ブロックを1%にするには

# tune2fs -m 1 /dev/hda1
  • apt でダウンロードしたキャッシュファイルを削除してみては

apt でダウンロードされた一時ファイルが /var/cache/apt/archives ディレクトリに保存されるので、もし今後利用するつもりがないのなら削除するとよいでしょう。

# aptitude clean 

/etc/apt/apt.conf でインストール済みパッケージを残すオプションを指定しておくと便利かもしれません。

# echo 'APT::Clean-Installed "false";' > /etc/apt/apt.conf.d/aptcleaninstalledfalse
  • apt で Recommends 指定のパッケージを引っ張ってこないようにしてみては

apt 0.7.7 以降では Recommends (推奨) 指定されているパッケージもインストール対象となっています。 Recommends に指定されているパッケージは動作に必須ではないので、使い方によっては必要ないかもしれません。

# apt-get --no-install-recommends install (パッケージ名)

/etc/apt/apt.conf で、これをデフォルトの振舞いにしてしまうと楽かもしれません。

# echo 'APT::Install-Recommends "false";' > /etc/apt/apt.conf.d/aptinstall-recommendsfalse
  • 使われていない古い設定ファイルを削除してみては

明示的に purge していないパッケージは設定ファイルなどが残ります。

$ dpkg -l | grep ^rc

再利用する予定がなければ削除。

# dpkg --purge (パッケージ名)

微々たる容量ですが、アップグレードを繰り返していると古いファイルが残る場合があります。

$ dpkg-query -W -f='${Conffiles}\n' | grep obsolete

まれに使われているファイルがリストされることもあるので、消す前にはよく確認してください。

少しでもメモリ使用量を節約したい

  • 不要なサービスを停止させましょう。 余計なサービスが起動しているとそれだけメモリを消費します。 セキュリティの観点からも、起動するサービスは最小限にしましょう。 Debian セキュリティマニュアルの 3.6 必要最小限のサービスを走らせる が参考になります。
  • 仮想コンソールの数を減らすと、数メガバイト節約できるそうです。JF の Small Memory mini-HOWTO の仮想コンソールが参考になります。initがsystemdであればオンデマンドで起動するようになっているため、特になにもする必要はありませんが、例外としてdbusが未インストールの場合、2〜6番の仮想コンソールが強制起動されます。この場合は# systemdctl mask getty-static.serviceで一旦すべて止め、必要な数だけ# systemctl enable getty@tty2.serviceなどとするいいかもしれません。

少しでも動作を速くしたい

ファイルシステムをオプションで速くする

マウントオプションとして追加する事で速くなります。

noatime をつけるとアクセスのみの場合にタイムスタンプを更新しなくなります。 副作用として、ファイルにアクセスした時に、タイムスタンプを更新される事を前提としたアプリケーションでは問題が出る可能性があります。

reiserfs は notail をつけると tail packing が無効になり速くなります。 tail packing は 4K にも満たない小さいファイルを、効率良く収納する仕組みです。

ext2/3 は htree を有効にするとファイルサーチが速くなります。

# tune2fs -O dir_index /dev/hda1

htree のハッシュアルゴリズムは legacy、half_md4、tea がありますが、half_md4 最も速いようです。

# tune2fs -E hash_alg=half_md4 /dev/hda1

ext4 では htree は逆に遅くなるので注意。

Re: EXT4 RAID read performance
http://lkml.org/lkml/2009/9/19/280

またディレクトリを最適化 (htree が有効ならインデックスを再生成) すると速くなるかもしれません。

# e2fsck -D /dev/hda1

RAM ベースファイルシステムを利用して速くする

メモリを豊富に搭載している場合、/tmp などを RAM ベースファイルシステムにする事で速くなります。 オススメは tmpfs で、カーネルがサポートしていれば特別な設定なしにマウントするだけで使えます。

# mount -t tmpfs tmpfs /hoge

起動する時にマウントさせるには /etc/fstab に

tmpfs /hoge tmpfs defaults 0 0

起動時に /tmp などに tmpfs でマウントさせる方法は Software/Init を参照。

注意点は tmpfs 上に置かれているファイル分のメモリは、そのファイルが削除されない限り開放されないということです。 そのため、実メモリとスワップの合計より多くの tmpfs をマウントして、実メモリとスワップの合計以上の容量を消費した場合、最悪システムがクラッシュします。

ramzswap は RAM 上に圧縮したスワップページを置くことで速くします。 利用するには compcache-xxx に含まれている ramzcontrol というユーティリティが必要です。 また Linux 2.6.33 以前のカーネルでは、カーネルにパッチを当てる必要があります。 詳しくは drivers/staging/ramzswap/ramzswap.txt を参照。

Linux 2.6.36 からは ramzswap から zram に名称変更され、圧縮 RAM ディスクとしても利用できるようになりました。 詳しくは

X のモジュールを外して速くする

X が読み込むモジュールを減らす事で速くなり、メモリ消費も抑えられます。 X はさまざまな機能をモジュールで提供していますが、恐らく使っていない機能も沢山あるかと。 設定は /etc/X11/xorg.conf を直接編集します。 次のような感じ。

Section "Module"
 Disable "dbe"
...
EndSection

少なくとも extmod だけは読み込んでおいた方がいいです。 フォントキャッシュなどの機能を提供しているので、外すと逆に遅くなります。 また dri などを利用している場合も同じく読み込んでおいた方がいいです。

各モジュールの拡張を無効にするには次のように書きます。

Section "Module"
...
 SubSection "extmod"
  Option "omit XFree86-DGA"
...
 EndSubSection
...
EndSection

X11 プロトコル拡張を無効にするには次のように書きます。

Section "Extensions"
 Option "MIT-SHM" "Disable"
...
EndSection

フォント周りで速くする

アンチエイリアス、ヒンティング、サブピクセルレンダリングなどを切れば表示が速くなり、消費メモリも抑えられます。 ヒンティングとサブピクセルは

# dpkg-reconfigure fontconfig-config

で設定できます。

アンチエイリアスは /etc/fonts/local.conf や ~/.config/fontconfig/fonts.conf に

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>

  <match target="font">
    <edit name="antialias">
      <bool>false</bool>
    </edit>
  </match>

</fontconfig>

と書いて下さい。

ただしアンチエイリアスを切ると、ビットマップが埋め込まれていないフォントサイズでは、かなり表示が汚なくなります。

prelink でソフトウェアの起動を速くする

prelink はバイナリにライブラリのパスを埋め込む事で起動時間を短縮します。

# prelink -fa

ただし glibc 2.3.1 以上でなければ、ファイルが破損する可能性があるので注意。 ディスクの空容量が少なくても、同じくファイルが破損する可能性がある。 また upgrade などでファイルが入れ変わった場合、再度 prelink を実行する必要がある。

prelink したバイナリを元に戻すには

# prelink -ua

/etc/default/prelink を

PRELINKING=yes

にすると、cron で毎日更新される。 /etc/cron.daily/prelink を参照。

preload でバイナリを先読みさせる

preload は予め必要なファイルをメモリ上に読み込んでおくことで、起動時間を短縮します。

スケジューラで速くする

Linux 2.6 系のカーネルなら用途によって I/O スケジューラを変えれば速くなるかもしれません。

$ cat /sys/block/(デバイス名)/queue/scheduler

で一覧表示でき、[] で囲まれている項が現在使われている I/O スケジューラ。

  • noop
  • deadline
  • cfq (Linux 2.6.18 以降のデフォルト)

例えば noop に変更するには

# echo noop > /sys/block/(デバイス名)/queue/scheduler

とする。

起動時に変更するにはパラメータを渡す

kernel /boot/vmlinuz root=/dev/hda1 elevator=noop

もしくは /etc/sysfs.conf に以下を追加。

block/(デバイス名)/queue/scheduler = noop

init を変更して速くする

Debian では

などを使う事ができます。 起動不能になる危険性がありますが、これらに差し換えると速くなるかもしれません。

Debian GNU/Linux のデフォルト init は、7/wheezy までは sysvinit、8/jessie からは systemd です。

ディスクをデフラグして速くする

ext4 は e2fsprogs に含まれている e4defrag コマンドでデフラグできます。 断片化の度合いをチェック

# e4defrag -c /

デフラグ

# e4defrag /

XFS では xfsdump に含まれている xfs_fsr コマンドでデフラグできます。 断片化の度合いをチェック

# xfs_db -c frag -r /dev/hda1

デフラグ

# xfs_fsr /dev/hda1

参考:

google-perftools で速くする

google-perftools で提供されている Thread-Caching Malloc を利用することで、メモリの割り当てが速くなるかもしれません。 libtcmalloc-minimal0 をインストールして

$ LD_PRELOAD=/usr/lib/libtcmalloc_minimal.so.0 (コマンド)

スワップ頻度を減らしてを速くする

頻度を減らすことが高速化に繋がるのは、メインメモリが著しく不足している等の特殊な環境だけです。 通常、スワップは高速化に寄与します。 あまり使われていない(が、開放もできない)キャッシュをスワップ領域に追い出すことで、よく使われるキャッシュをより多く保持できるようになるからです。

/proc/sys/vm/swappiness の数値を減らすと、スワップしづらくなります。

# echo 10 >/proc/sys/vm/swappiness

zswap を有効にすると、スワップページを圧縮して小さくした上でメモリ上に一時的に保持し、ギリギリまでスワップ領域に書き出すのを遅らせるようになります。

有効にするにはカーネルに zswap.enabled=Y zswap.zpool=zsmalloc というパラメータを渡します。

kernel /boot/vmlinuz root=/dev/hda1 zswap.enabled=Y zswap.zpool=zsmalloc

boot 時のログを全部見たい

bootlogd をインストールして、/etc/default/bootlogd の BOOTLOGD_ENABLE を

BOOTLOGD_ENABLE=yes

にすると、/var/log/boot に boot 時のログが保存されます。

init が systemd なら

$ journalctl -b

boot 時のメッセージをもう少し静かにさせたい

標準の状態ではズラズラと沢山のメッセージが流れますが、後でログを見れば済むので抑制したいという人等もいるかと思います。

  • カーネル

パラメータに quiet を指定

kernel /boot/vmlinuz root=/dev/hda1 quiet
  • initscripts

/etc/default/rcS を次のように

VERBOSE=no

boot 時のメッセージをクリアさせない

デフォルトではログインプロンプト表示前にスクリーンが一旦クリアされます。これを止めるには

# systemctl disable getty@tty1.service
# cp /lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty1.service

として、コピーしたファイルの中の

TTYVTDisallocate=yes

という行を

TTYVTDisallocate=no

に書き替えてください。

Debian 環境の中に別の Debian 環境を作りたい

debootstrap を使いましょう。 stable 環境の中に unstable 環境を作ったりできます。例えば /debian-sid ディレクトリ下に unstable 環境をつくるには

# aptitude install debootstrap
# mkdir /debian-sid
# debootstrap sid /debian-sid

参考:
CLIマジック:debootstrapによるDebian GNU/Linuxのインストール

クロスコンパイル環境を構築したい

Embedded Debian 仕様の場合

参考:

1. 5.0/lennyの場合:
通常は以下のような感じで導入する。この方法はツールチェーンのクロスコンパイルがほぼ必要なく、20~30分程度で用意できるメリットがある。
まずは以下のパッケージをインストールする。
これにより dpkg-cross(dpkg のクロスビルド用ラッパー), apt-cross (apt-get 用ラッパー), 等ヘルパーツールがインストールされる。

# aptitude install emdebian-tools

インストール後にターゲットアーキテクチャを聞かれるので選択する。例として armel を選択したとする。

次に、以下のコマンドを実行する。

# emsetup --arch armel

(emdebian-tools で設定したアーキテクチャを指定する)
これでクロスコンパイラ、ターゲット用標準Cライブラリ等が軒並みインストールされるはず。

2. 6.0/squeeze 以降の場合:

5.0/lennyとは様子が異なっている。

# aptitude install emdebian-crush emdebian-grip emdebian-archive-keyring

した後に、以下の apt-line を追加し、

deb http://www.emdebian.org/debian/ squeeze main

deb-src http://www.emdebian.org/debian/ squeeze main

# aptitude update
# aptitude upgrade
# aptitude install gcc-4.4-arm-linux-gnueabi

もっと良い方法があれば書き変え願います。

その他のライブラリ等が必要な場合は、

apt-cross --install --arch armel --suite sid --mirror http://ftp.jp.debian.org/debian/ libjpeg62

というように通常の apt-get とほぼ同じ感覚でターゲットアーキテクチャ用ライブラリをインストールできる。

バイナリの試験走行は qemu 等利用する。(qemu-arm 等)
https://sites.google.com/a/oidon.net/www/linux/arm-emulation

Win32 向け?

Win32 用のクロスコンパイラは以下のパッケージを利用する。エミュレーション環境は Wine で代用するしかない。(もちろんフルエミュレーション環境として, VirtualBox, Qemu, VMware を利用してもよい。) 当然だがライブラリを使用する場合すべて自前でクロスビルドする必要があるのでかなり困難を伴う。実質不可能?

# aptitude install gcc-mingw32 mingw-w64 wine

その他の情報:

プログラムが使用しているスレッドの調査・変更

以下のコマンドを実行すると、プログラムが使用しているスレッドライブラリ (LinuxThreadsNative POSIX Thread Library (NPTL) ) とそのバージョンが表示される。

getconf GNU_LIBPTHREAD_VERSION

実行結果(例)

NPTL 2.3.6

プログラムに動的リンクされるスレッドライブラリを変更するには、環境変数 LD_ASSUME_KERNEL にカーネルバージョンを指定し、プログラムを起動する。

バージョン 2.4 では LinuxThreads, バージョン 2.6 では NPTL が使用される。

実行(例)

LD_ASSUME_KERNEL=2.4.1 getconf GNU_LIBPTHREAD_VERSION

実行結果(例)

linuxthreads-0.10

5.0/lenny 以降の (e)glibc では、LinuxThreads はもはや使えなくなっているので、 何らかの理由でリビルドできない古いバイナリは動作しなくなった。

6.0/squeeze での実行(例)

$ getconf GNU_LIBPTHREAD_VERSION

NPTL 2.11.2

$ LD_ASSUME_KERNEL=2.4.1 getconf GNU_LIBPTHREAD_VERSION

getconf: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory

libc-X.Y.Z.so (たとえば、eglibc v2.11.2 ならば /lib/libc-2.11.2.so) を実行するとスレッドライブラリも含めて libc の情報が得られる。

$ /lib/libc-2.11.2.so

GNU C Library (Debian EGLIBC 2.11.2-7) stable release version 2.11.2, by Roland McGrath et al.

Copyright (C) 2009 Free Software Foundation, Inc.

This is free software; see the source for copying conditions.

There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A

PARTICULAR PURPOSE.

Compiled by GNU CC version 4.4.5.

Compiled on a Linux 2.6.32 system on 2010-10-31.

Available extensions:

crypt add-on version 2.1 by Michael Glad and others

GNU Libidn by Simon Josefsson

Native POSIX Threads Library by Ulrich Drepper et al

BIND-8.2.3-T5B

For bug reporting instructions, please see:

<http://www.debian.org/Bugs/>.

参照:

なんかユーザやグループが沢山あるけど

/usr/share/doc/base-passwd/users-and-groups.txt.gz を読みましょう。

ユーザ ID の割り当てってどうなってるの?

ポリシーで決められています。

0-99Debian システムが使用
100-999一般的なソフトウェアが使用
1000-29999一般ユーザが使用
30000-59999予約済み
60000-64999一時的にユーザ ID を必要とするソフトウェアが使用
65000-65533予約済み
65534nobody が使用
65535使用禁止

emergency mode って何?

あまり知られていませんが、緊急 (emergency) モードというものがあります。 これは init スクリプトを実行せず、直接シェルを起動します。 init=/bin/sh とは違う点は、シェルの起動前に root のパスワードを要求されます。 sysvinit では

kernel /vmlinuz root=/dev/hda1 -b

systemd では

kenel /vmlinuz root=/dev/hda1 systemd.unit=emergency.target

swap が不足

free コマンドでみると Swap が 0 になっています。dmesg には以下の文が…。

version 0 swap is no longer supported. Use mkswap -v1 /dev/hda5
対応
書いてあるとおり
# mkswap -v1 /dev/hda5
を実行。その後に
# swapon -a
で /etc/fstab 中で swap マークが付いているスワップデバイスをすべて有効にします。

マシンをサスペンド (スタンバイ)、ハイバネート (休止状態) するには?

こちらに移動しました。

スワップ領域を動的に確保する

通常スワップ領域は固定サイズですが、swapspacedphys-swapfile などを利用すると、必要な時に必要な分のスワップ領域を確保してくれます。

大量の実メモリを積んでいるような場合に無駄なディスクスペースの消費を抑えられますが、常に仮想メモリを必要とする環境での利用はオススメしません。

ビープ音がうるさい

# "blacklist pcspkr" > /etc/modprobe.d/beep.conf

もしくは alsa-utils パッケージをインストールして

$ alsamixer

PC Speak のところで m を押してミュートに。 もし PC Speak が見当たらなければ、Beep を探してください。

ix86 CPU 向けバイナリはなんで i486 でビルドされてるの?

GCC が i386 と i486 以降とで互換性のないバイナリを吐くようになったから。

当初は i386 で i486 CPU をエミュレーションするパッチを用意し、i386 CPU でも動かせるようしていました。 そして時は流れ、そのパッチは保守されなくなり、セキュリティ問題まで発生。 修正したいという人間もおらず、Debian Installer も i386 CPU を積んだマシンで動かすには事実上オーバースペックに。 結果、今の Debian は i386 CPU を積んだマシンをサポートしなくなりましたとさ。

「~/デスクトップ」みたいな日本語ディレクトリがキモい

既存ディレクトリを英語名にリネームして、ディレクトリのロケールを英語に再設定するスクリプト。

#! /bin/sh
type xdg-user-dirs-update || exit 1
. /etc/xdg/user-dirs.defaults || exit 1
. ~/.config/user-dirs.dirs || exit 1

cd ~
rename.ul $XDG_DESKTOP_DIR $DESKTOP $XDG_DESKTOP_DIR
rename.ul $XDG_DOWNLOAD_DIR $DOWNLOAD $XDG_DOWNLOAD_DIR
rename.ul $XDG_TEMPLATES_DIR $TEMPLATES $XDG_TEMPLATES_DIR
rename.ul $XDG_PUBLICSHARE_DIR $PUBLICSHARE $XDG_PUBLICSHARE_DIR
rename.ul $XDG_DOCUMENTS_DIR $DOCUMENTS $XDG_DOCUMENTS_DIR
rename.ul $XDG_MUSIC_DIR $MUSIC $XDG_MUSIC_DIR
rename.ul $XDG_PICTURES_DIR $PICTURES $XDG_PICTURES_DIR
rename.ul $XDG_VIDEOS_DIR $VIDEOS $XDG_VIDEOS_DIR
LANG=C xdg-user-dirs-update --force

パッケージの中にはあるのに何故かインストールされないファイルがある

# ucf --purge (本来入るはずのファイルのフルパス)

とやってみましょう。

システムが Aug 21 10:00:00 xxx kernel: [12867.111100] Critical temperature reached (100 C), shutting down. というメッセージを吐いて勝手にシャットダウンする

マシンが熱すぎです。直ぐに冷やしてください。

  • ファンにほこりがたまっている場合、直ぐに温度が上昇します。適宜掃除を。
  • ノートパソコンは構造上熱がたまりやすいので極力空調等も利用して冷ましてください。
  • SpeedStepPowerNow!, Cool'n'Quiet 等搭載 CPU ならば、cpufrequtils, cpufreqd 等で 周波数を強制的に下げ熱を抑えることが出来るかもしれない。

ちなみにメッセージは drivers/thermal/thermal_sys.cprintk 出力です。

システムのタイムゾーンを変えたい

# dpkg-reconfigure -plow tzdata

ネタ

Hello, world! を表示させたい

# apt-get install hello
$ hello

ls の typo でイライラしたい

# apt-get install sl
$ sl

極悪ヴァージョン

$ sl-h

moo?

$ apt-get moo
$ apt-build moo
$ aptitude moo
-v オプションを繋げてみましょう。(例: $ aptitude -vvv moo)

仮想リチャード M. ストールマン

non-free ツリーに含まれている全パッケージを報告します。

# apt-get install vrms
$ vrms

雑多なこと

拡張子

https://linuxjm.osdn.jp/html/LDP_man-pages/man7/suffixes.7.html 参照

いしかわむつみさんは女ですか?

男です。

http://hanzubon.jp/



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-07-09 (月) 13:27:41 (1476d)