Ubuntu
Ubuntu に関するメモ(Ubuntu Desktop / Server 8.10 以降の話)
Ubuntu はメインでは使っていないが、今後のために気が向いたら記入することにする。 2010 年頃から仕事で 10.04.1 base のとある環境を幾つか構築しているので、そこでの話が増えるかも。
さらに 2012 年以降からは幾つかのサーバを 12.04 辺りにシフトしつつあるので、、、という具合に、下に行くほど(時間経過と共に)内容が移り変わっていくことに注意。
14.04, 16.04 と上がり、現在は ubuntu 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
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 とか書く必要はない。こちらを参照
iptables
ubuntu での iptables 設定についてはこちらを参照
基本的には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 がデフォルトのマルチユーザモードらしい。
console での keyboard 設定
/etc/defaults/console-setup 内を弄れば良さそうにみえるが再起動すると元に戻ってしまう。どうやら initrd に書き込んでいるっぽいので、dpkg-reconfigure コマンドを利用した方が良さそう
dpkg-reconfigure console-setup
fbterm
コンソールで日本語を使いたい場合、apt で fbterm を入れると良い。ただ、fbterm だけだと日本語が表示されないので jfbterm も入れる。(jfbterm は exit 時に画面が凍る(既知のバグらしい)ので使わない方が吉。)
無線のアクセスポイントにしたい
まず第一に、master mode にできる無線 chip を入手する必要がある。(こことかの情報が役に立つかも)
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 になっている。)
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を適用すれば動いてくれる
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 がダメすぎる。 何がどうダメなのかは こちら が参考になるだろう。 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 は不要みたい)
ある特定のファイルに関連するパッケージを 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レポジトリを追加して 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)でもあったようで、あんぽんたんなミスっぽい。
その際の対処方法(gzopen が無かったら gzopen64 を返すというコード(以下)の挿入)を使うのが吉。
<?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
kernel の自前buildメモ
こちらの記事を参考に
必要な環境の用意
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 ポートの通信を確認する方法について
XDG directory
ホームディレクトリ直下に作られる幾つかのディレクトリ、default でシステムロケールに合わせて日本語になってしまう。英語にしたければ
LC_ALL=C xdg-user-dirs-update --force
とかすれば良い。再ログイン後、システムロケールに合わせて「変える?」と聞いてくるが、変えないにすれば ok 。
日本語入力の優先順序
日本語切り替えで、例えば「日本語」と「日本語(mozc)」がある場合、mozc の方を優先するには dconf で次のように
dconf write /org/gnome/desktop/input-sources/sources "[('ibus', 'mozc-jp'),('xkb', 'jp')]"
dconf の使い方(抜粋)
上の話に関連して、dconf の使い方をメモしておく。dconf-editor でもよいが、CLI の方がやはり楽ちん。
dconf dump DIR
全ての設定状態を確認するには root directory を指定して
dconf dump /
を実行すればよい。特定の directory、例えば [org/gnome/desktop/input-sources] について調べるなら
dconf dump /org/gnome/desktop/input-sources/
とすればよい。この際、directory path の最初と最後に / を忘れぬこと。(忘れたら文句言われます)
dconf read KEY
ある KEY の値、例えば KEY /org/gnome/desktop/input-sources/xkb-options の値を調べるには
dconf read /org/gnome/desktop/input-sources/xkb-options
とすればよい。(この KEY を設定することで Caps の制御とかできる)
dconf write KEY "値"
ある KEY の値を書き込むには以下のように
dconf write /org/gnome/desktop/input-sources/xkb-options "['ctrl:nocaps']"
この例は CapsLock を Ctrl にするやつですね。
systemctl
すぐに忘れるのでメモ
systemctl start hogehoge (サービス起動) systemctl stop hogehoge (サービス停止) systemctl restart hogehoge (サービス再起動) systemctl reload hogehoge (サービスのリロード) systemctl status hogehoge (ステータス) systemctl enable hogehoge (自動起動有効) systemctl disable hogehoge (自動起動無効) systemctl is-enabled hogehoge (自動起動設定の確認) systemctl list-unit-files --type=service (サービス一覧) systemctl daemon-reload (systemd 用の設定ファイルの再読み込み)
悩ましいのは reload と daemon-reload
reload はサービス自体の設定ファイル(例えば /etc/apache2/ 以下の設定ファイル群)の reload なのに対して、daemon-reload の方はサービスをキックする systemd 用の設定ファイル(*.service や *.timer)の reload
daemon-reload の説明(man systemctl より抜粋):
daemon-reload Reload the systemd manager configuration. This will rerun all generators (see systemd.generator(7)), reload all unit files, and recreate the entire dependency tree. While the daemon is being reloaded, all sockets systemd listens on behalf of user configuration will stay accessible. This command should not be confused with the reload command.
Keyword(s):[Linux] [Ubuntu]
References:[研究室のserver] [Linux]