雑記 - Ubuntu Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

Ubuntu に関するメモ(Ubuntu Desktop / Server 8.10 以降の話)

Ubuntu はメインでは使っていないが、今後のために気が向いたら記入することにする。
2010 年頃から仕事で 10.04.1 base のとある環境を幾つか構築しているので、そこでの話が増えるかも。

さらに 2012 年以降からは幾つかのサーバを 12.04 辺りにシフトしつつあるので、、、という具合に、下に行くほど(時間経過と共に)内容が移り変わっていくことに注意。

現在は14.04, 16.04 と上がり現在は ubuntu 14.04 18.04 辺り。

!Software RAID
今なら他の Linux でもあるかもしれないが、インストール時に Software RAID 領域を作成し、そこにインストールすることができる。Server 8.04 版で確認した。便利。

!sysv-rc-conf
run level 毎の起動 service を変更する( /etc/rc${runlevel}.d/ のリンク張替 )ためのもの。システム管理をするのなら、これは入れておいた方が便利。

!画面解像度
システムメニューの「設定」→「画面の解像度」で解像度を変更した際の話。ここで設定したものは、システム全体に反映されるわけではない。ユーザがログインしていない状態であれば、システムデフォルトの画面解像度になる。

この設定情報がどこに保存されているかというと、~/.config/monitor.xml 。

!dpkg
dpkg -i deb_package_file      # install
dpkg -r deb_package_file      # uninstall
dpkg -c deb_package_file      # debパッケージに含まれるファイルリスト
dpkg -l                       # インストールしてある package 一覧
dpkg -S /usr/bin/hogehoge     # /usr/bin/hogehoge を含む package 名取得
dpkg -L package_name          # パッケージに含まれるファイルリスト

!network設定
/etc/network/interfaces を以下のように
!! dhcp の場合
# The primary network interface
auto eth0
iface eth0 inet dhcp
!! IP 固定の場合
# The primary network interface
auto eth0
iface eth0 inet static
address 10.0.2.20
network 10.0.2.0
netmask 255.255.255.0
broadcast 10.0.2.255
gateway 10.0.2.2
dns-nameservers 192.168.10.10

!パッケージ名のメモ
sshd -> openssh-server
ssh -> openssh-client (default で入っているはず)
ng -> ng-common, ng-cjk

!dash
/bin/sh が bash じゃなくて dash になっている。調べてみると
dash は POSIX 互換で bash よりも小さいらしいが、bash にある機能が無かったりするので script を書くときには注意しましょう。
K 君に教えてもらった。thx!

この辺りから 10.04 が対象になります。

!xdg-user-dirs
(初回?)ログイン時にホームディレクトリに作成されるディレクトリ群は、/etc/xdg/ 以下の user-dirs.defaults 辺りに書いてあるっぽい

!!関連しそうなコマンド群
xdg-user-dir
xdg-user-dirs-update
xdg-user-dirs-gtk-update
!!関連しそうなファイル群
/etc/xdg/*
/etc/X11/Xsession.d/60xdg-user-dirs-update
~/.config/user-dires.*

adduser では /etc/skel/ 以下をコピーするのみ。ログイン時に xdg-user-dirs-update が実行され、ディレクトリ群(デスクトップ、ダウンロード、ミュージック、、)ならびに ~/.config/user-dirs.* が作成される。

=== UTF8ではないディレクトリを作成させるには /etc/xdg/user-dirs.conf の filename_encoding を C にすればよい。(すでに作成された UTF8 なディレクトリは変更されない)仮にこれらのディレクトリを作り直すならば、~/.config/user-dirs.* を消しておくこと。=== ←嘘くさいので消去。以下参照。

(追記 2010/Jul/09)上述の xdg-user-dirs の話、再度試してみたら動きが怪しげ。/etc/xdg/user-dirs.conf の filename_encoding を C にすると Desktop ディレクトリしか作成されない。要チェック。→ごそごそ再テストしてみた。コマンドラインから xdg-user-dires-update を叩いた場合には期待通りに encoding に合わせたディレクトリ達がホームディレクトリに作成される。ところが gdm から初回 login するときには xdg-user-dirs-update がうまく動いていないっぽく、Desktop ディレクトリのみしかできない。(おかしなことに gdm からでも ja_JP であれば作られる。) netboot 環境だからってことはないと思うのだが。要調査。

Desktop のみが作られていたことについて。/etc/xdg/user-dirs.conf の filename_encoding=C としてあると、/etc/X11/Xsession.d/60xdg-user-dirs-update は「Can't convert from UTF-8 to C」という error を出してしまう。結果、Desktop 等は作られないのだが、gnome-session から起動される nautilus が Desktop を自動作成する。というのが真相のようだ。

というわけで、/etc/xdg/user-dirs.conf の設定と xdg-user-dirs-update の動きのみを調べ直せばいいが、source を当たった方が早そう。(他の仕事が立て込んでいるので、ここでちょっとpending)

(追記 2010/07/27)source code をちょろっと読んだ結果わかったこと。
xdg-user-dirs-update の実行時、system locale に従ったディレクトリが作成される。/etc/xdg/user-dirs.conf の filename_encoding は、指定された system locale をどのような encoding で表現するかを指定するためのもの。つまり、system locale が日本語ならば、filename_encoding は、UTF-8 や EUC-JP や JIS などしか意味を持たない。
(ちなみに、xdg-user-dirs-update の中で、directory の文字変換は gettext() で行っている。)terminal から
LANG=C xdg-user-dirs-update
とすれば、locale が C として実行されるので、英語の directory が作成される。というわけで、以前やっていた filename_encoding=C という設定は全くの的外れということですね。orz...

!gdm の PostSession
gdm の PostSession が shutdown or reboot 時に実行されないというバグあり。bugzilla.gnome.org で丁度議論されていて、patch が fix した模様。
https://bugzilla.gnome.org/show_bug.cgi?id=621581

メニューから shutdown or reboot した場合、PostSession が動いたり動かなかったり動作に再現性がない。どうやら dbus 経由(?)で shutdown 命令等が伝えられているようで、アプリケーション側が受け取るタイミングで動作が変わっているみたい。(推測なので違うかも)

!上部メニューバーの使わないものをざっくり外す方法
guest session できないようにするには
dpkg -r gdm-guest-session
電源アイコンの左側のアカウント名が表示されている奴(chat, ubuntu one)を消すには
dpkg -r indicator-me
日付の隣辺りにある chatやmailの設定のメールアイコンを消す
dpkg -r indicator-messages
スクリーンセーバーを外す
dpkg -r gnome-screensaver

!suspend 等を無効にする
Ubuntu では /etc/default/acpi-support を編集すれば良いみたいなことが書いてあるが、このファイルを編集したのでは無効化できない。

kernel parameter を弄るとかいうのは無しの方向で、一応の対処方法を書いておく。(あまり美しくないが、、、)
!!対処法1
rm /usr/sbin/pm-suspend
とすれば一応 suspend の抑制できる。この pm-suspend は /usr/lib/pm-utils/bin/pm-action へのリンクなので、必要になればリンクを張り直せばよい。
!!対処法2
/usr/share/polkit-1/actions/org.freedesktop.upower.policy
内の allow_active を no にする。

!apache2 + ruby + php5 (ubuntu 10.04 server)
apache2 & php5 の設定ではまったので覚え書き
apt-get install apache2 libapache2-mod-ruby php5 libapache2-mod-php5
cd /etc/apache2/mods-available/
vi userdir.conf  (-Indexes ExecCGI などの修正)
a2enmod userdir
vi php5.conf
/etc/init.d/apache2 restart
php5.conf の後半の php_admin_value engine Off を含む <IfModule ...> ... </IfModule> を comment するのがポイント。
何故か ubuntu は、default でユーザディレクトリで php が使えないようになっている模様。(このため、php なページを開こうとすると、ブラウザのダウンロードパネルが現れてしまう。)

!自動アップデート
自動で security update するようにしておこう。自前で script とか書く必要はない。[[こちら|https://help.ubuntu.com/community/AutomaticSecurityUpdates]]を参照

!iptables
ubuntu での iptables 設定については[[こちら|https://help.ubuntu.com/community/IptablesHowTo]]を参照

基本的には[[Linuxでのアクセス制御]]のやり方で設定

!runlevel (10.04 以降での話。その前は知らない。)
ubuntu の runlevel 設定はちょっと変わっている。他の Linux なら /etc/inittab で設定するところだが、ubuntu では Upstart を使っているとかで /etc/inittab がない。が、(/etc/init/rc-sysinit.conf をみると)/etc/inittab を作れば参照してくれそうではある。

上述の /etc/init/rc-sysinit.conf を読むと、最初の方に runlevel を指定する変数 DEFAULT_RUNLEVEL がある。ここを設定するのが最もシンプルではないだろうかと思われる。(未確認)

ちなみに、RUNLEVEL=2 がデフォルトのマルチユーザモードらしい。

!diskless な ubuntu の設定
[[Diskless Ubuntu Howto|https://help.ubuntu.com/community/DisklessUbuntuHowto]]

!Upstart 関連
!! initctl コマンド
initctl help
initctl list           # 各ジョブの状態をみる
initctl stop hogehoge  # hogehoge を止める

!console での keyboard 設定
/etc/defaults/console-setup 内を弄れば良さそうにみえるが再起動すると元に戻ってしまう。どうやら initrd に書き込んでいるっぽいので、dpkg-reconfigure コマンドを利用した方が良さそう
dpkg-reconfigure console-setup

!fbterm
コンソールで日本語を使いたい場合、apt で fbterm を入れると良い。ただ、fbterm だけだと日本語が表示されないので jfbterm も入れる。(jfbterm は exit 時に画面が凍る(既知のバグらしい)ので使わない方が吉。)

!pppoeconf
pppoe の設定ツール。簡単。
/etc/ppp/ 辺りに設定ファイルあり。

!無線のアクセスポイントにしたい

まず第一に、master mode にできる無線 chip を入手する必要がある。([[ここ|http://linuxwireless.org/en/users/Drivers]]とかの情報が役に立つかも)

[[アクセスポイント設定のメモ]]

!mailto で起動するアプリの system default を変更する方法(lucid にて)
mailto をクリックしたとき、ubuntu では evolution が起動するように設定してある。これを例えば thunderbird に変更したいときの話。

一般ユーザの場合は、お気に入りのアプリ( gnome-default-applications-properties )を使えばよい。

問題はシステムのデフォルト設定を変更する方法。
以前の gnome の知識では /etc/gconf/gconf.xml.mandatory/ ディレクトリ以下に適当なファイルやフォルダを用意することで設定できていたはずなのだけど、何故か同じようにやってもうまく変更できない。(うちの環境固有かも?)

そこで ubuntu の package list 等や各種コマンドを調べてみた。どうやら以下のようにすれば、system default 設定を変えられそう。

!!方法1
まず、 /usr/share/gconf/schemas/desktop_gnome_url_handlers.schemas
を編集する。この xml ファイル中に /schemas/desktop/gnome/url-handlers/mailto/command を指定するところがある。ここの evolution を thunderbird に変更する。
emacs -nw /usr/share/gconf/schemas/desktop_gnome_url_handlers.schemas

次に、この変更を反映させる必要がある。編集した schemas ファイルを gconf-schemas コマンドで register し直せばよい。
gconf-schemas --unregister desktop_gnome_url_handlers.schemas
gconf-schemas --register desktop_gnome_url_handlers.schemas

!!方法2
方法1より簡単で(多分)正当な方法(後で気付いた f^-^;;;)

gconf-editor を立ちあげ、 /desktop/gnome/url_handlers/mailto を開く。command キーのプログラムを変更した後、右ボタンをクリックして「システムの設定にする」をクリック。


!remote server の X client
remote server (X server 無しの ubuntu server) 上に入れた firefox や sylpheed を、X client として local machine 上で使おうとしたら、メニューや画面上の日本語が豆腐に化けてしまった。

remote machine 上に resource が足りないことが原因だろうと判断し、以下のパッケージを入れた。
apt-get install gtk2-engines
apt-get install ttf-takao-gothic ttf-takao-mincho ttf-takao-pgothic
これで一応正しく表示されるようになった。(gtkrc が無かったので gtk2-engines を入れてみたものの、もしかしたら不要かもしれない)

!update-motd
(remote) login 時に、system 情報やら reboot すべきかどうかやら update があるかどうか等が表示される。これは login 時や ssh login 時に、motd が自動生成され、それが表示されるため。

この表示を抑制するには、例えば /etc/pam.d/sshd の中の
session    optional     pam_motd.so
をコメントすれば良い。(ちなみにこの行があると、ssh login 時に /etc/update-motd.d/ 内の script が実行され、/var/run/motd が生成される。/etc/motd はこのファイルへの symbolic link になっている。)

!hwclock
hardware clock を UTC にするには、/etc/default/rcS 中の UTC=yes とすればよい

!ruby-1.9.1
apt-get install ruby1.9.1-full
apt-get install rubygems1.9.1
gem1.9.1 install rubygems-update

!ubuntu-support-status
各パッケージのサポート状況を調べるコマンド
ubuntu-support-status --show-all
とかすると、何時までサポートされるかがズラズラと表示される

ubuntu 10.04 上のこのコマンドには bug があるようだが、ここのパッチ[[ubuntu-support-status.patch|https://launchpadlibrarian.net/68622227/ubuntu-support-status.patch]]を適用すれば動いてくれる

!Unity から従来の Gnome session に
しばらく desktop 環境は使ってなかったが、久しぶりに Ubuntu 13.10 Desktop 環境を触ってみたがいろいろ改悪されている。。。とりあえず unity は使いにくいので従来の gnome-session にするために、
apt-get install gnome-panel
apt-get install gnome-session-fallback
といったものを入れる。ログイン入力そばのアイコンをクリックすると Unity から従来の Classic な Gnome ログインを選べる。

!iBus 関連
ubuntu 13.10 から使われだしたらしい iBus 1.5 がダメすぎる。
何がどうダメなのかは [[こちら|http://cpplover.blogspot.jp/2013/10/ibus-15.html]] が参考になるだろう。
iBus を使わないようにした方がいいだろう。
とりあえず、fcitx を入れた。

!キー割り当て変更
iBus 1.5 に関連してだと思うが、キー割り当ての変更が簡単にできなくなっている。何たることだ。私は Caps を Ctrl として使いたいのだけど、それが簡単に変更できない。(以前は簡単にできたハズなのに)

調べてみたところ、次のパッケージを入れてやるのが一番簡単そう。
apt-get install gnome-tweak-tool
この後、gnome-tweak-tool を実行して、typing の項目からキーマップ変更すればよい。

(追記)あるいは terminal から
dconf write /org/gnome/desktop/input-sources/xkb-options "['ctrl:nocaps']"
としても良いみたい。(チェックしてないけど、dconf を使えば gnome-tweak-tool は不要みたい)

!パッケージを rebuild したい
とりあえず、以下のパッケージを入れる
apt-get install build-essential devscripts

!ある特定のファイルに関連するパッケージを build する手順
まず、そのファイル(例えば /usr/bin/lynx だとしよう)を含むパッケージ名を取得するために
dpkg -S /usr/lib/lynx
すると、この例だと lynx-cur というパッケージ名と分かるはず。
次はその source (と関連するファイル群)を取ってくるために、以下のように
apt-get source lynx-cur
apt-get build-dep lynx-cur
この後、ダウンロードした dsc ファイルを参照して、展開&パッチ当てする
dpkg-source -x lynx-cur_"version".dsc
展開したディレクトリ内に移動した後に
dpkg-buildpackage -rfakeroot -b
とかすればパッケージが作成される

参考: [[http://www.cmiss.org/cmgui/wiki/BuildingUbuntuPackagesFromSource]]、[[http://gihyo.jp/admin/serial/01/ubuntu-recipe/0152]]

!cpufrequtils
i7-3517U CPU @ 1.90GH な PC を使っているのに、コンパイル中でも CPUクロックが 800MHz のままだった。とりあえず cpu 状態を調べる cpufreq-info を入れるために、
apt-get install cpufrequtils
して状況確認。その後、
cpufreq-selector -g performance
とかしてやり、CPU freq. を 1.9GHz で運用する。

!dconf-editor
以前は gconf-editor でゴニョゴニョ設定できていたが、今は dconf-editor で設定変更するみたい。(どうやら dconf は gconf の後継っぽい)
apt-get install dconf-editor

!ipv6 を殺す
/etc/sysctl.conf に以下を加える:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
その後 sysctl -p する。或は
echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6
echo 1 > /proc/sys/net/ipv6/conf/default/disable_ipv6
echo 1 > /proc/sys/net/ipv6/conf/lo/disable_ipv6
としてもいいはず。
ifconfig してみて ipv6 address が無いのを確認すればよい。

あと /etc/default/ssh 中で
SSHD_OPTS=-4
とかしておく(必須かどうかしらんけど)

!error: Failed to allocate internet-domain X11 display socket.
ssh -X や ssh -Y しても X client apps を飛ばせない時、/etc/ssh/sshd_config 中で
AddressFamily inet

!ruby-2.1
ruby 1.9.3 が 2015/02/23 にサポート切れになるとかいう話。現行 ubuntu のパッケージには無いので、以下のように[[Brightbox Ruby NG|https://launchpad.net/~brightbox/+archive/ubuntu/ruby-ng]]レポジトリを追加して ruby 2.1.x を入れる
add-apt-repository -y ppa:brightbox/ruby-ng
apt-get update
apt-get -y install ruby2.1
あとは gem (rubygem) で必要なパッケージを適宜入れる

!PHP Fatal error:  Call to undefined function gzopen() in ...
pukiwiki-1.5.0を使おうとしたら、動いているように見えるのにページを編集できない。apache の error.log を調べてみると ubuntu 謹製の php-5.5.9 で、gzopen() が無いよ、というエラー。
何でも[[以前の ubuntu (karmic 9.10)でもあった|http://d.hatena.ne.jp/bellbind/20091030/1256861603]]ようで、あんぽんたんなミスっぽい。

その際の対処方法([[gzopen が無かったら gzopen64 を返すというコード(以下)|https://gist.github.com/bellbind/222020]]の挿入)を使うのが吉。
<?php
//  workaround no "gzopen" problem on ubuntu(karmic,trusty) php5
if (!function_exists("gzopen") && function_exists("gzopen64")) {
    function gzopen($file, $mode) {
        return gzopen64($file, $mode);
    }    
}
?>
リンク先にも記載してあるけれど、例えば pukiwikiであれば lib/pukiwiki.php の先頭に上記コードを入れればよい。

!mod_evasive
apache のスパム除けに mod_evasive を入れる
apt-get install libapache2-mod-evasive
install すると mod-enable への link は作られるので、リンク元の /etc/apache2/mod-available/evasive.conf を適当に編集して reload すればよい

!clickjacking 対策
/etc/apache2/mods-available/headers.conf に以下のように記述
<IfModule mod_headers.c>
  Header set X-Frame-Options "SAMEORIGIN"
</IfModule>
その後 a2enmod headers して headers module を有効に。最後に server を restart するのをお忘れ無く。

!NIC の名前とか
従来は eth0 とか wlan1 とかいった名前が enp5s0 とか wlxf62f720g みたいな名前になってしまうとき、 kernel parameter として以下を設定すれば従来の命名法になる
net.ifnames=0 biosdevname=0

!update-grub
grub.cfg を更新したいときに使うコマンド。各パーティションを調べ、起動可能なリスト(grub.cfg)を作る。

!kernel の自前buildメモ
[[こちら|https://ytooyama.hatenadiary.jp/entry/2018/07/02/222223]]の記事を参考に

必要な環境の用意
apt-get install fakeroot kernel-package git libssl-dev bison flex

kernel source を取得して展開
tar xf linux-4.20.3.tar.xz
中に入って、現在の kernel config をコピー & make oldconfig
cd linux-4.20.3
cp /boot/config-4.xxxxx .config
make oldconfig

fakeroot で kernel の deb を作成
fakeroot make-kpkg --initrd --append-to-version=-mybuild kernel-image kernel-headers -j $(getconf _NPROCESSORS_ONLN)
出来上がった deb ファイルはひとつ上のディレクトリ内にある。インストール等は以下のように
dpkg -i linux-{image,headers}-xxxxx.deb
update-grub    # grub の更新

!package の自動更新抑制
手動で入れたものがある場合、自動更新されると塩梅が悪い。package_name というパッケージの自動更新を制御するには以下のように
echo package_name hold | dpkg --set-selections     #  自動更新抑制
echo package_name install | dpkg --set-selections      # 自動更新に戻す場合
dpkg --get-selections    #   状態を確認する

![[openssl で通信チェック]]
443 ポートや 25 ポートの通信を確認する方法について