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

パッケージ名のメモ

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 とか書く必要はない。こちらを参照

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 がデフォルトのマルチユーザモードらしい。

diskless な ubuntu の設定

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 を入手する必要がある。(こことかの情報が役に立つかも)

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

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を適用すれば動いてくれる

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 は不要みたい)

パッケージを 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/BuildingUbuntuPackagesFromSourcehttp://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

update-grub

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

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.
Last modified:2025/04/25 10:23:17
Keyword(s):[Linux] [Ubuntu]
References:[研究室のserver] [Linux]