ubuntu server 16.04 LTS のインストールメモ

初版作成  2016.11.4
最終更新  2019.07.14


◆◆ インストール時の操作 2016.11.4 ◆◆

> 既にインストールしてある Linux がある場合、
  それらのファイルシステムを上書きしてよいか聞いてくる。

  上書きを選択する

> 言語は english を選ぶ
  地域は Asia --- Japan

> インストール時のユーザー名は admin を入れる。

  ここで入れたユーザー ID は 1000 になる。
  自分用 ID は後で作成する。

  ubuntu 11.04 のとき、ここで自分用 ID を作成し、
  後から uid を 1000 ---> xxxx に変更すると sudo できなくなった。
  /etc/group を正しく設定しておくと回避できると思われるが・・・

> ネットワークの設定はインストール時に聞いてくる

  固定 IP アドレス, ネットマスク, デフォルトルーター, DNS を設定する

> 色々なサーバーソフトを入れるか否か聞いてくる。
  Mail server, samba, sshd などを入れる。


◆◆ sudo ◆◆

  $ sudo -s    元のユーザーの .bashrc を読み込む
  $ sudo -i    root の .bashrc を読み込む

◆◆ apt コマンド ◆◆

apt は apt-get と似ているが、後発のコマンドで apt-get の
欠点を解消しているらしい。

最初にすること

  $ sudo -s
  # apt update

インストール, アンインストール

  # apt-cache search keyword

  # apt install pkg-name
  # apt remove pkg-name      設定ファイルは残る
  # apt purge pkg-name       設定ファイルも削除

  # apt upgrade             最新バージョンのインストール
                            やめたほうがよいかも

インストール済パッケージのリスト

  $ dpkg --get-selections
  $ dpkg -l


◆◆ X Window System とデスクトップのインストール ◆◆

  $ sudo -s
  # apt -y install ubuntu-desktop

ブート直後から X が起動する。
admin でログインできなくなった。ログイン直後に
エラーが発生してデスクトップにたどりつけない。

sshd が動作しているので、ネットワークからログインし

  $ sudo -s
  # rm .Xauthority
  # rm .xsession-errors

で入れるようになった。


◆◆ ターミナルの起動 ◆◆

左上の渦巻マークのアイコンで teminal と入れると
いくつかターミナルソフトが表示される。

無印の Terminal が使いやすいようだ。


◆◆ ユーザーの追加と uid の変更 ◆◆

System Settings(歯車マークのアイコン)---- User Accounts

新たにユーザーを加えると uid = 1001, gid = 1001 になる。
nfs で共有するために、手作業で uid, gid を変更する。

uid の変更

   # vipw

group id の作成

   # emacs -nw /etc/group

   my-group:x:510:  という行を追加

ディレクトリの設定変更

   # cd /home
   # chown -R my-account my-account
   # chgrp -R my-group my-account

◆◆ 基本ソフトのインストール ◆◆

   # apt install emacs
   # apt install ftpd
   # apt install tcsh
   # apt install telnetd
   # apt install mlterm

◆◆ キーボード ◆◆

> ctrl と caps の入れ換え

   $ setxkbmap -option ctrl:swapcaps

> esc と 全角半角 の入れ換え

  $ xmodmap ~/keyfile

~/keyfile の中身は
-------------------
keycode 49 = Escape
keycode  9 = Zenkaku_Hankaku
-------------------

> 上記の設定の記述

.bashrc に書き込む。しかし、リモートからログインして
上記を実行すると

  Cannot open display "default display"
  xmpdmap: unable to open display ''

というエラーが発生する。sudo -s するとその場所で止まる。
以下のように記述する。

if [ "x$REMOTEHOST" = "x" -a $USER = "my-account" ]; then
  echo "set keyboard"
  setxkbmap -option ctrl:swapcaps
  xmodmap /home/yabu/keyfile
else
  echo "keyboard is not set."
fi

sudo -s のときと、リモートログインしたときは
xsetxkbmap と xmodmap を実行しない。


◆◆ パスワード無しで sudo する ◆◆

   # visudo

my-account ALL=(ALL) NOPASSWD: ALL

◆◆ nfs の設定 ◆◆

(1) インストール

   # apt install nfs-common         <-- client 用
   # apt install nfs-kernel-server  <-- server

   /etc/hosts を更新しておく

(2) クライアントの設定

   # mount -t nfs eclipse:/home/Pioneer/my-account /home/my-account/e

  /etc/rc.local に書く

(3) サーバーの設定(未確認)

/etc/exports を書く

/home/my-account   eclipse(rw,sync,no_subtree_check)
/var/lib           viper(rw,sync,no_subtree_check,no_root_squash)

salamander:mysql が所有するファイルを viper:root が
アクセス可能にするため no_root_squash を付ける。

(4) 設定を反映させる

# /etc/init.d/nfs-kernel-server reload
# exportfs

歯車マークをクリックすると System Settings

◆◆ ターミナルでの日本語の表示 ◆◆

bash: export LANG=ja_JP.UTF-8
tcsh: setenv LANG ja_JP.UTF-8


◆◆ 日本語メニュー JIS キーボード ◆◆

> Language Support ---- Language  Install/Remove Languages ---- Japanese

ドラッグして「日本語」を一番上に持っていく

Regional Formats
   「日本語」を選ぶ。Apply System-Wide をクリックする

> Text Entry

Input sources to use: で + を押して Japanese(OADG 109A) を選ぶ。
矢印キーを押して Japanese を一番上に持っていく。

> キーボードの選択

画面右上の En をクリックして Ja を選ぶ


◆◆ mozc による日本語入力 ◆◆

ibus-mozc をインストールしたが、最終的に
ibus ではなく fcitx から mozc を使うことにした。

  # apt -y install language-pack-ja-base
  # apt -y install language-pack-ja
  # apt -y install ibus-mozc

  $ ibus-setup

追加 ---- 日本語 ---- Mozc

Mozc を選択 ---- 設定

再起動(不要かも)

  $ im-config -n fcitx

ログアウト --- 再度ログイン

右上のキーボードのアイコン ---- 入力メソッド ---- Mozc

変換キーはデフォルトで「全角/半角」と「ctrl + space」
しかし、ctrl + space は emacs の範囲選択と重なって困る。

windows キー(super) + space に変更する。

設定 ---- 全体の設定   に入力メソッドの on/off のメニューがある


◆◆ メールの設定 ◆◆

インストール時に postfix は既にインストールしてある

> 設定ファイルの配置

/etc/postfix/main.cf

を配置する。今回は、以前インストールした ubuntu マシンの
ファイルを持ってきたが、新規に作成する場合は、
以下のようにする。

ひな形は /usr/share/postix/main.cf.dist

変更点は以下の 2 点でよいと思われる。

myhostname =
relayhost = 192.168.xx.yy

> 再起動

  # /etc/init.d/postfix restart

> チェック

  $ mail xxxx@nara-edu.ac.jp -s "test mail" < mes-file


◆◆ 自作グラフ描画ライブラリのコンパイル ◆◆

  # apt install libx11-dev        libX11 ではない
  # apt install gfortran

gfortran を入れると /usr/bin/f77 というコマンドが
使えるようになる。

xypp 実行時にエラーが発生してコアダンプする。
Raspberry Pi ではエラーは発生しない。

  Pi: gcc 4.9.2-10
  ubuntu: gcc 5.4.0

output.c における wprintf での可変長引数の扱いに問題がある。
修正した。

wprintf は 7 個の引数をスタックから降ろそうとするが、
呼び出し元でスタックに積む変数の個数は最小で 1 個である。
降ろすときに、不正な領域をアクセスすると思われる。

今まで、エラーが出なかったのが不思議。


◆◆ デバッガの使い方 ◆◆

1. -g を付けてコンパイルしておく。 -O は付けない

ライブラリ
  # apt install libc6-dbg

2. gdb の使い方

最初から実行

% gdb
(gdb) file ../../xypp
(gdb) run nsgraph.X
(gdb) bt

コアがあるとき

% gdb ../../xypp core
(gdb) where


◆◆ TeX のインストール ◆◆

  # apt install texlive
  # apt install texlive-math-extra
  # apt install texlive-fonts-extra
  # apt install texlive-plain-extra

  # apt install texlive-lang-japanese
  # apt install texlive-lang-cjk

  # apt install ptex-base
  # apt install xdvik-ja

platex, xdvi, dvips, gs が使える。

platex が扱う漢字コードは UTF-8
EUC ではエラーがでる。

dvips, gs は問題なく使える。

xdvi (xdvik 22.84.16 j1.41-ptexlive (Xaw toolkit))
はデフォルトでは以下の不具合が生じる。

   eps ファイルを表示すると、
   以前に同じ場所に描画した eps ファイルが重なって表示される

回避方法は以下の通り。

  $ xdvi --gsalpha

.bashrc に以下のように記述しておくとよい。

  alias xdvi='xdvi --gsalpha'

<謝辞>

この解決方法は新潟工科大学の竹野茂治先生に
教えていただきました。この場を借りて深くお礼を
申し上げます。

◆◆ プリンタの設定 ◆◆

> System Settings から GUI でプリンタの設定を行う。

CUPS の設定が行われる。ここでの設定がどのように効いているのか不明。
ただし、この設定によって CUPS のデーモンが起動するようになった
可能性はある。

(1) プリンタとして LPD/LPR ホストまたはプリンターを選ぶ。

  ホスト名  microline   ( /etc/hosts で登録しておく )
  キュー    lp

ドライバーを選択する画面に入るので

  Oki   C5700(PS)

を選択する。テスト印刷をしていないので、
この設定が効いているのか試してない。

(2) プリンタとして Oki DATA CORP MC562(192...) を選ぶ。

接続は DNS-SD 経由の.....  を選ぶ。

テストページは正しく印刷された。

> コマンドラインから設定を行う

参考サイト

  $ lpinfo -v

を実行すると、使用可能なプリンタのリストが表示される。
lpd プロトコルで使用予定の PS Printer は

network socket://192.168.xx.yy

と表示される。

  # lpadmin -p lps2 -E -v socket://192.168.xx.yy

で設定完了。lps2 はプリンタ名である。

  # lpstat -l -p lps2

で確認。印刷は以下のコマンドで行う。

  $ lpr -P lps2 ps-file

~/.bashrc に以下のように書いておく。

export PRINTER=lps2


2017.3.28 CUPS が起動していない。
コンソールからログインして
「設定」---「プリンター」---「設定」を見ると
プリンターが停止している。

「ポリシー」---「有効にする」にチェックを入れると
再び使えるようになった。


◆◆ .bashrc ◆◆

export TERM=vt100
export CANNAHOST=eclipse
export EDITOR='emacs -nw'
export PRINTER=lps2

#  LANGUAGE が設定されているときは LANG よりも LANGUAGE が優先する。

export LANG=C

export PATH="$PATH:~/bin:."
export CDPATH=".:~:/etc"

alias ls='ls --color=never --show-control-chars -F'
alias ne='emacs -nw'
alias rm='rm -i'
alias cp='cp -i'
alias sc='. ~/.bashrc'

function title(){
   echo -n "]0;$1"
}

# 上で ^[ と ^G はコントロールキャラクター


◆◆ apache2 ◆◆

http://redtiger.tank.jp/wiki/doku.php?id=ubuntu-server-10-04:apache2
上記のサイトに設定ファイルの配置について詳しい説明がある。

・実行用ファイル

本体              /usr/sbin/apache2
起動用スクリプト  /usr/sbin/apache2ctl

起動              $ sudo /etc/init.d/apache2 [start|stop|restart]

・設定ファイル

設定ファイル   /etc/apache2/apache2.conf                大元のファイル

apache2.conf から

   mods-enabled/*.load
   mods-enabled/*.conf
   httpd.conf
   ports.conf        待ち受けポート
   conf.d/
   sites-enabled/

が include される。

Include conf.d のようにディレクトリが指定されいる場合、
指定されたディレクトリ中の全てのファイルが読み込まれるようだ。
従って、バックアップファイル *~ は削除せねばならない。
        ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
有効 (無効) にしたいモジュールは

   $ sudo a2enmod userdir
   $ sudo a2dismod userdir

とコマンドを打つと

   mods-available/*.(load|conf) ---> mods-enabled

のシンボリックリンクを張る(削除する)。

主要な設定や変更点は以下の通り

   sites-enabled/000-default       DocumentRoot
   conf.d/security                 サーバーの応答(バックアップファイル *~ の消去必要!!)

DocumentRoot を apache2.conf や httpd.conf で設定しても
sites-enabled/000-default の設定が優先するようだ。
apache2.conf の最後に書いてもダメである。

ただし、sites-available/default で 80 番ポートでの設定を
しているが、ports.conf で待ち受けポートを 81 に設定すると、
apache2.conf や httpd.conf の設定が生きる。

ログ           /var/log/apache2
DocumentRoot   /var/www

           --------------

・各ユーザーディレクトリを有効にする。

  $ sudo a2enmod userdir

  mods-enabled/userdir.conf  を確認する。

・php を有効にする

  $ sudo a2enmod php5

デフォルトの php5.conf は /var/www 以下では php を実行できるが
/home/*/public_html では実行を禁じているので、以下のようにコメントアウトする。

#            php_admin_value engine Off

・perl の CGI

最初の 2 行で

Content-Type:text/html
空行

を出力しないと、サーバーのエラーが発生する。
elf の apache では発生しないのだが・・・


◆◆ auctex のインストール 2017.3.6 ◆◆

古いパッケージであるが、FreeBSD の時代から使っていた auctex 11.86 を
インストールする。

1. auctex-11.86.tar.gz を展開する
2. % ./configure
   % make
   # make install

でインストールが完了する。
C-c : でコメントアウト (トグル) が動作する。


◆◆ emacs の bold 表示をやめる 2017.3.6 ◆◆

(global-font-lock-mode 0)

;  出典  ult.riise.hiroshima-u.ac.jp/~nagato/?emacs
;  広島大学 長登康


◆◆ mlterm 2017.5.16 ◆◆

mlterm を apt コマンドでインストールする。
最初、日本語を表示する方法が見つからなくて
苦労した。

何が効いているのか良くわからないが、
結局以下のようにして、日本語が k14 で表示
できている。

viper の ports のときに使った mlterm.2.9.2.tar.gz を
展開して configure して make, make install した。

tcsh から起動すると日本語の表示、k14 の使用ができないが、
bash から起動すると k14 を使って日本語を表示する。

~/.mlterm/main は eclipse のものを、そのまま使う。

◆◆ emacs 24.5.1 の様々な問題 ◆◆

eclipse の emacs 22.1.4 と異なる点がある。

・fortran-mode で newline のときに indent してしまう

--->  (setq electric-indent-mode nil)

・fortran mode で数字を入れると
  Symbol's value as variable is void: last-command-char
  というエラーが出る。

---> (define-obsolete-variable-alias 'last-command-char 'last-command-event "at least 19.34")

・.F ファイルをコンパイルしてコンパイルエラーが出ると、*.F という
  ファイル名を入れる必要がある。

f77 の出力が変わったことが原因。
eclipse の f77 は GNU Fortran (GCC) 3.4.4 [FreeBSD]
salamander の f77 は GNU Fortran (....) 5.4.0

コマンドラインから実行すると、エラーの行が以下のようになる

<eclipse>
% f77 -fsecond-underscore -c -g -O .debug/isou3.f
isou3.F:33:
         zimplicit none
         1             2
Unrecognized statement name at (1) and invalid form for assignment or statement-function definition at (2)


<salamander>

% f77 -fsecond-underscore -c -g -O .debug/isou3.f
.debug/isou3.f:33:6: Error: Unclassifiable statement at (1)

emacs のコンパイルウィンドウでは以下のようになる

f77 -fsecond-underscore -c -g -O .debug/isou3.f
<command-line>:33:6: Error: Unclassifiable statement at (1)
Error occur in command 'f77 -fsecond-underscore -c -g -O .debug/isou3.f'.  Stop.

f77 の出力が異なるのが原因のようなので、対処が難しい。

◆◆ /boot が一杯になる 2017.6.21 ◆◆

外からログインし、tcsh を起動し cd すると、固まる。

もう一度外からログインすると、ログインはできるが、
df, tcsh を実行すると、固まる。

コンソールに行き、リセットスイッチを押す。
起動し、/boot の残り容量が 0 になったというメッセージがでる。

http://bioinfo-dojo.net/2016/07/02/boot_100_ubuntu/
に対処法が書いてある。

(1) 残り容量の確認

  $ df -h

で /boot が残り容量 0 になっているのを確認する。

(2) 使用中のカーネルの確認

  $ uname -r

(3) インストールされているカーネルの確認

  $ dpkg --get-selections | grep linux-image

(4) 使用中でないカーネルを削除する

  $ sudo apt-get autoremove --purge linux-image-4.x.y

使っていない旧いカーネルを 1 つ名指しで削除すると、
付随する諸々のファイルも削除されるようだ。良くわからない。


◆◆ パッケージをインストールしようとすると Unmet dependencies というエラーが出る 2017.12.26-27 ◆◆

最初に

  # apt update

を実行した。これが悪かったかもしれない。

/boot が満杯になっているのが原因のようだ。

  $ dpkg --get-selections | grep linux-image

を実行すると、カーネルファイルがたくさんある。
2017.6.21 の記事に従って、

  $ sudo apt-get autoremove --purge linux-image-4.4.0-78

を実行してもエラーが出てカーネルが消えない。

指示(apt-get -f install をパッケージ名なしで実行する)の通りに

  # apt-get -f install

と実行すると sudo apt autoremove を実行せよと言ってくる。
実行してもエラーが出る。-f で実行せよと言ってくるので

  # apt -f autoremove

を実行する。しかし、エラーが出る。
リブートしてみたが、状況は変わらない。

  # apt-get -f purge linux-image-4.4.0-78

もダメ。
手動で remove する。

  # rm *78*

を実行し、5 個のファイルを削除する。あるていど
空き容量ができた。

  # apt-get -f install

と打つと、処理が進む。
しかし、最後に dpkg のエラーが発生して終了した。

再び boot が満杯になっている。
手動で削除する。

  # rm *79*
  # rm *81*

で 10 個のファイルを消す。その上で、

  # apt-get -f purge linux-image-4.4.0-83

を実行すると正常終了する。手動で既に rm した
バージョンを

  # apt-get -f purge linux-image-4.4.0-79

とすると、エラー無く終了した。

  # apt-get autoremove

を実行すると、不要と思われるバージョンのカーネルを
お任せで削除するようだ。

今、4.4.0-92 をカーネルとして使っている。
89 91 92 97 を残して 93 96 を削除した。


◆◆ boot の残り容量が少ない 2018.3.2 ◆◆

console からログインすると、上記のように表示された。
df すると

   /boot  は残り  8193

となっている。

   $ uname -r

で確認すると、カーネルは

  4.4.0-104.generic

と表示された。

   # apt-get autoremove

を実行すると、

   108, 109, 92

が削除され、

   /boot  は残り  158648

となった。そしてカーネルは

   4.4.0-116-generic

に設定された。


◆◆ rc.local における mount コマンド 2018.3.20 ◆◆

rc.local に mount コマンドを書いている。
その mount コマンド実行時にサーバーが落ちているか
サーバーと通信できないと、起動途中で止まる。

コンソールで ctrl-c を実行しても効かない。
外から telnet もできない。

rc.local における mount コマンドは & を付ける。

◆◆ 自動起動のスクリプトの管理 2018.4.11 ◆◆

  /etc/init.d  /etc/rc?.d

などの下に自動起動のスクリプトが入っている。
自動起動するデーモンを設定するために、sysv-rc-conf コマンドを
インストールする。

  # apt install sysv-rc-conf

起動する

  # sysv-rc-conf

CUI だが GUI 風のインターフェースで各デーモンを on/off できる。


◆◆ qmail のインストール 2018.4.12 ◆◆

ファイルの場所

http://archive.linuxfromscratch.org/blfs-museum/5.0/BLFS-5.0/server/qmail.html

に書いてある。ダウンロードしたファイルの
拡張子は tar.gz だが、実際は tar なので、

  $ tar xf qmail-1.03.tar.gz

で展開する。パッチは以下にある。

http://www.ksknet.net/qmail/qmaildatelocalt.html

インストール方法は以下に書いてある。

http://library.denet.ad.jp/2014/09/qmail-1.html

    ---------------

(1) パッチをあてる

  $ tar zxf qmail-1.03.tar.gz
  $ cd qmail-1.03
  $ patch < qmail-date-localtime.patch

(2) error.h の修正

extern int errno; -----> #include <errno.h>

(3) コンパイル

  $ make

(4) インストール

  # make setup check
  # ./config-fast salamander.nara-edu.ac.jp

(5) 設定

/var/qmail/control 以下を設定する。

設定の詳細は次の項目


◆◆ /boot を空ける 2018.4.27 ◆◆

$ df -h

すると、/boot が残り 51M になっている。

# uname -r

すると、

4.4.0-121-generic

と表示される。

# apt-get autoremove

すると、古いバージョンが削除され残りが 207M となった。
ときどき、autoremove を行う必要があるようだ。

◆◆ pop3 サーバーの設定 2018.5.11 ◆◆

<参考>
http://sakanade.asablo.jp/blog/2012/11/01/6620467

ubuntu はデフォルトで dovecot という pop サーバーが
動作している。

以下の設定が必要である(Maildir 形式を使用)。

(1) /etc/dovecot/conf.d/10-mail.conf

#mail_location = mbox:~/mail:INBOX=/var/mail/%u   コメントアウト
mail_location = maildir:~/Maildir                 コメントを外す

(2) /etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = no

> dovecot をリスタートさせる。

# /etc/init.d/dovecot restart

◆◆ cron について 2018.9.21 ◆◆

日経 linux 2018.9 特別付録 p.47 に crontab -e は
お薦めできないと書いてある。

理由はファイルの置き場所が /var/spool/cron/crontabs/user-name
なので、バックアップするのを忘れるからである。

上記のファイルは root しかアクセス権がないので、ユーザーの権限では
バックアップできない。

1人で使う場合は /etc/cron.d/ 以下にファイルを置け、
と書いてある。

/etc/cron.d の下にファイルを置くと、cron が実行して
くれるようだ。

/etc/cron.d/user-name

というファイルを置き、そのファイルの内容は
以下のようにする。

---------------------------------------------
#!/bin/sh
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=user-name
HOME=/home/yabu

0 3 * * * user-name command
----------------------------------------------

crontab -e で設定するファイルとの違いは、
コマンドの手前に実行するユーザー名を書くことである。

しかし、この方法も難がある。

http://blog.pinkumohikan.com/entry/etc-cron.d-has-restriction-for-permission-and-owner

によると、ファイルの所有者が root でなくてはならず、
かつ、他人に書き込み権限を与えてはならない。

ファイルの所有者がユーザーのときは /var/log/syslogd を見ると、
WRONG FILE OWNER というエラーが出て、実行されない。

所有者が root でも他者に対して書き込み許可が出ていると、
INSECURE MODE というエラーが出て、書き込みできない。

編集するには sudo が必要なので、crontab -e より面倒である。

しかし、一般ユーザーに対してリード許可は出せるので、
一般ユーザーの権限でバックアップできる。

バックアップのメリットの方が大きいと判断して、
crontab -e はやめた。