私のメモです。参考になればいいですが、間違っていたらごめんなさい。18.04LTSのクリーンインストールのメモです。@2018.10.11
8月に18.04LTSにアップグレードしたのもつかの間、2018年10月4日にHDDが完全に逝ってしまい、急遽HDD「ST2000LX001」を購入して18.04LTSをmini.isoからクリーンインストールしました。
18.04LTSのインストーラは、DN2820FYKHのHDDをBIOSの設定に依らずにUEFIと認識するようです。そのため、BIOSでLegacyなHDDを選択し、HDDに/をマウントするパーティションを作成してインストールすると、インストール後に起動できませんでした。また、ネットワークに接続してインストールをする際、固定IPの設定ができるのは「expert install」を選択した時だけでした。他のモード(rescueモード含む)を選択した場合、IPアドレスをDHCPで取得できないとaptサーバに接続できず、先に進めませんでした。
試行錯誤して、以下の設定等で無事インストールできるようになりました。
あとは特に問題なく進めることができました。
インストール後、18.04LTSのアップグレードの時と同様に、ja_JP.UTP-8がLANGに設定されていると、do-release-upgradeでのメッセージが全て文字化けして読めません。そこで、LANGコマンドで文字コードを「C」に設定しておきます。
# LANG=C
PuTTYを使ってWindowマシンから設定できるよう、最初にsshの設定を行いました。apt-get install openssh-serverでsshサーバをインストールした後、以下の設定を/etc/sshd_configファイルで行いました。
|
|
チャレンジレスポンス関係の2つの項目は、14.04LTSの際は「no」で動いていましたが、18.04LTSでは「yes」しないとPuTTYが公開キーを要求されてしまい、接続できませんでした
上記の設定後、/etc/init.d/ssh restartでsshdを再起動して設定を反映させます。また、PuTTYで作成したssh2用の公開鍵をユーザの.sshディレクトリ(/home/username/.ssh)にauthorized_keys2という名前でコピーし、パーミッションを400に設定します。これでPuTTYを使ってWindowsからログインできるようになります。
実際のsshd_configファイルはこちらになります。
18.04LTSでは、IPアドレスなどの設定は/etc/netplanの下にある×××.yamlというファイルで行い、これまでのように/etc/network/interfacesでは設定しないようになっていました。iptablesの設定もそこでできるようですが、扱いやすいifupdwonパッケージを使うことにしました。
iptablesを設定し、それを起動時に実行するにはiptablesパッケージとifupdownパッケージが必要です。apt-get install iptables ifupdownでインストールします。
ifupdownをインストールすると、/etc/networkの下に if-pre-up.d というディレクトリが作成されます。このディレクトリ内にあるスクリプトファイルは、ネットワークインターフェースが有効になる際に実行されます。そこで、set_iptablesというファイルにiptablesのコマンドを記載しておきます。注意点は、ピリオドを含むファイルは実行されないことです。set_iptables.shなどと名前を付けると実行されなくなってしまいます。
設定した内容は次の通りです。ここの「サーバ」とはubuntuをインストールしたNUCのことです。
実際のinterfaceファイルはこちらをご覧下さい。また、UbuntuのiptablesコマンドはDNS逆引きオプションがオンになっています。iptalbes -Lで設定を確認する際は、iptables -nLとDNS逆引きをオフにすると表示が速いです。
なお、以前の設定をコピーして使おうとしたら、ネットワークインターフェース名(iオプションで指定)が変わっているのに気づかず、しばらく悩んでしまいました(^_^;;
Sambaサーバを使うために、まずはapt-get install sambaで必要なパッケージをインストールします。Sambaの設定は14.04LTSの設定ファイルをそのまま使うことできました。
useraddコマンドでSambaユーザを追加することを忘れないように。
14.04LTSと同じように以下の設定をしました。他は元のファイルの記述から変更していません。
|
|
14.04LTSではその前の設定をコピーして使っていたので見落としましたが、デフォルトのapache2.confファイルではDirectoryディレクティブのOptionsに「Index」が含まれものがあります。「Index」は、そのDirectoryにindex.htmlなどのインデックスファイルがない場合、ディレクトリをリストするというオプションです。余計なファイル見える可能性があるので削除しています。また、これを一度削除しないと、なぜかトップページがapache2をインストールした直後のページになってしまいました。
読み込むモジュールの設定を変えたい場合、/etc/apache2/mods-available以下にあるモジュール名.confファイルを編集します。たとえば、Webページを表示する際の言語の優先順位で日本語を最優先にしたい場合、negotiationモジュールの設定ファイルnegotiation.confで、LanguagePriorityを以下のように編集します。
僕の環境では、SSI(Serve Side Include)用としてindex.shtmlをインデックスファイルに使っていることがあるため、dir.confにindex.shtmlを追加しました。
モジュールを読み込む際は、a2enmod モジュール名 で読み込みます。このコマンドを実行すると、/etc/apache2/mods-enabled以下に/etc/apache2/mods-availableへのシンボリックリンクが作成され、apache2を再起動してa2enmodで読み込むように設定したモジュールが読み込まれます。a2enmodコマンド、a2dismodコマンドは、このシンボリックを作成、削除するコマンドでしかないため、モジュールの設定を変えたらapache2を再起動するまで設定は変更されません。
SSI(Serve Side Include)に必要なIncludeモジュール、cgiに必要なcgidモジュールを読み込んでからapache2を再起動するまでの手順は次のようになります。。
|
ちなみに、読み込み可能なモジュールは、/etc/apache2/mods-available以下にあります。どのようなモジュールが読み込まれているかは、apache2ctl -l、apache2ctl -M で確認できます。さらに、サーバの状態はapache2ctl -V で表示されます。
apache2の設定を終えたら、siteの設定を行います。siteの設定は、000-default.confを編集する、或いは/etc/apache2/site-available以下に「ファイル名.conf」というファイルを作成して行います(.confを付けないとエラーになるという噂もあり)。作成したサイトを有効にするには、a2ensite 作成したファイル名 を実行します。これもa2enmod同様、/etc/apache2/sites-availableにシンボリックリンクを作成するだけです。そのため、設定変更を有効にするにはapache2を再起動する必要があります。
僕のウェブページのように、トップページに設定したカウンタをSSIで動かす場合、/var/www/htmlディレクトリに次のように記述します。SSI用にOptionにIncludesを入れておく必要があります。また、index.htmlファイルがない場合、ディレクトリの一覧を表示しないようIndexesオプションを外しています。
<Directory /var/www/html>
Options Includes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
cgiを動かす場合、/etc/apache2/conf-availableにあるserve-cgi-bin.confを修正して使います。以下の例は、serve-cgi-bin.confでcgiのディレクトリを/var/www/cgi-binに変更しただけの例です。
<IfModule mod_alias.c>
<IfModule mod_cgi.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfModule mod_cgid.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfDefine ENABLE_USR_LIB_CGI_BIN>
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
<Directory "/var/www/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
</Directory>
</IfDefine>
</IfModule>
serve-cgi-bin.confを有効にするために、site設定ファイルに以下の1行を加えます。
Include conf-available/serve-cgi-bin.conf
また、cgiのモジュールを有効にするため、次のコマンドでcgidモジュールを有効にします。
# a2enmod cgid
認証が必要なディレクトリは、次のようにディレクティブを記述します。この例は、/var/www/html/secret以下のディレクトリに、Digest認証をパスする全ての人(valid-user)にアクセスを認める設定です。ユーザIDとパスワードのファイルはAuthUserFileに記述されたファイル(/etc/apache2/.htdigest)となります。
<Directory /var/www/html/secret>
AuthName "Restricted Space"
AuthType Digest
AuthDigestDomain /secret/
AuthUserFile /etc/apache2/.htdigest
require valid-user
</Directory>
次に、パスワードファイルを作成します。たとえば、fishers fellowというユーザIDを作成する場合、次のように入力します。
# htdigest -c /etc/apache2/.htdigest "Restricted Space" "fishers fellow"
# Adding password for fishers fellow in realm Restricted Space.
# New password:{パスワードを入力}
# Re-type new password:{パスワードを再入力}
パスワードファイルにユーザIDとパスワードを追加する場合、-cオプションが不要です。たとえば、fishers guestというユーザIDを追加する場合、次のように入力します。
# htdigest /etc/apache2/.htdigest "Restricted Space" "fishers guest"
# Adding password for fishers guest in realm Restricted Space.
# New password:{パスワードを入力}
# Re-type new password:{パスワードを再入力}
上記でDigest認証の設定が終わりました。最後にDigest認証が可能になるように、auth_digestモジュールを有効にしてから、apache2を再起動します。
# a2enmod auth_digest
# service apache2 restart
ちなみに、auth_digestモジュールを有効にする前にapache2を再起動しようとするとエラーになります。
Office YUAiさんのブログが参考になります。僕の環境では、iptablesでポート443番を開けてからLet’s encryptの導入し、apacheの設定ファイルを修正しました。
ウェブサーバを立てていると、既にport80番をiptablesでACCEPTにしているはずです。それに倣い、443番もACCEPTにしました。具体的には/etc/network/if-pre-up.dディレクトリに作成したiptables用スクリプトファイルに次の2行を追加しました。
上のように設定を終えたら、「/etc/init.d/networking restart」でネットワークを再起動します。また、僕のサーバのように、ブロードバンドルータを介してインターネットにつながっている場合、ブロードバンドルータのポートフォワードの設定で、「tcp 443」をサーバのIPアドレスに転送するよう設定する必要があります。
iptables -Lコマンドで次の行が表示されれば設定OKです。
Office YUAiさんのブログの通り、以下のコマンドを実行して、apache用の証明書取得のクライアントツールcertbotをインストールします。
apacheの設定ファイルにドメイン名を入力しておく必要があります。/etc/apache2/sites-available/000-default.confファイルに次のようにドメイン名を追記します。
追記したら、apacheを再起動します。
以下のコマンドでapacheに証明書をインストールするようにします。
すると、メールアドレスを入力するダイアログが現れますので、メールアドレスを入力してEnterキーを押します。
マニュアルのURLが現れますので、「Agree」を押します。
先ほど入力したメールアドレスをElectronic Frontier Foundationで共有して良いかを聞かれます。個人のポリシーに従ってYes/Noを入力して先に進みます。
Apacheの設定が始まります。僕の環境では、http接続をhttpsへリダイレクトするか問われ、「Yes」にしました。
リダイレクトの設定が成功したという下のメッセージが表示され、すぐに次のImportant Noteが表示されて設定が終了しました。。
ケータイでhttp://fishers.mydns.jpにアクセスしたところ、ちゃんとhttps://fishers.mydns.jpに接続されていました。
上のメッセージにも書かれている通り、証明書は一定期間内に更新しなくてはなりません。以下のコマンドでcrontabをエディタnanoで編集できるようにします。
最下行に以下を追記します。
上記は毎月15日の23:55にcertbot renewを実行するというものです。追記したら、エディタがnanoならCtrl+oで保存し、Ctrl+xでエディタを終了します。viの場合、ESPで編集モードを抜けた後、「:wq」と入力してエンターキーを押すと保存して終了します。
ウェブページに全文検索機能Namazuを設置しました。
Ubuntu 18.04LTSでは、「namazu2」というパッケージになります。また、インデックスを作成するのに必要な「namazu2-index-tools」、「libnkf-perl」、「libtext-kakasi-perl」もインストールします。
ウェブサーバで使う/usr/lib/cgi-bin/namazu.cgiを/var/www/cgi-binにコピーし、パーミッションを読み取りと実行、所有者とグループをwww-dataに変更します。
namazuが使うテンプレートもコピーしておきます。コピーしたテンプレートを自分のウェブページに合わせてカスタマイズすると良いです。パーミッションは読み取りにします。
namazuのcgiは同じディレクトリにある.namazurcを優先的に読みに行きます。そこで、設定ファイル/etc/namazu/namazurcをnamazu.cgiのあるディレクトに.namazurcとしてコピーして使います。
設定ファイル.namazurcのコメントアウトを外して、自分の環境に合わせて設定します。以下は僕の環境の例で、#以降は説明で、実際の設定ファイルには記述しません。
Index | /var/www/cgi-bin/nmz | # インデックスファイル置き場 |
Template | /var/www/cgi-bin | # テンプレートファイルNMZ.*.ja置き場 |
Replace | /var/www/html/ https://fishers.mydns.jp/ | # ファイルパスをURLへ変換 |
Lang | ja | # 日本語で表示 |
Charset | "ja_JP.ecujp" "ECU-JP" | # 文字セットはEUC-JPに |
編集を終えたらパーミッションは読み取りにします。また、インデックスや結果の表示などで使う文字セットはここで設定したものに合わせます。namazuでは文字セットがECU-JPを前提にしている節があるので、それに従ってECU-JPにしました。
インデックス作成の前に、Ubuntu18.04LTSで使用できる文字セットにja_JP.ecujpが入っているかを「locale -a」で確認します。僕の環境で日本語の文字セットはja_JP.utf8しかありませんでした。そこで、次のコマンドで使用できる文字セットを確認し、EUC-JPをインストールします。
次にインデックスを作成します。デフォルトでは、/usr/share/namazu/filter/hnf.plとmp3ファイルのIDタグを検索する/usr/share/namazu/filter/hnf.pl というnamazuのフィルタがエラーを起こすので、このファイルを名前を変更して無効化します。
インデックスの作成はmknmzコマンドで行います。-Lで文字セットを、-Oで出力先を指定でき、そのあとにインデックスを作成するディレクトリを指定すると、そのディレクトリ以下をインデックス化します。下の例では、animalディレクトリ以下が/var/www/cgi-bin/nmz以下にインデックス化されます。
複数のディレクトリを1つのインデックスにする場合、ディレクトリをスペースで区切って指定します。
注意点として、インデックスは追加だけされてるようです。自宅サーバ程度の規模であれば、定期的にインデックスファイルを全て削除してからインデックスを作成した方が良いかも知れません。
ウェブページで検索が行えるよう、検索機能を付けるページに次の行を追加します。
<form action="https://fishers.mydns.jp/cgi-bin/namazu.cgi" method="get">
<input type="text" name="query" size="50">
<input type="submit" name="submit" value="K's Pageの検索">
<input type="hidden" name="whence" value="0">
ウェブページの更新はウィンドウの共有フォルダをこのサーバにマウントして行っています。Windowsの共有フォルダをLinuxにマウントするため、cifs-utilsをインストールしました。また、後述のMyDNSの更新のためにwgetもインストールしました。
これで次のコマンドで192.168.0.1にある共有フォルダ「share」を/mntにマウントできるようになります。
コマンド入力後、WindowsUserNameのパスワードを尋ねられます。正しいパスワードを入力するとマウントされます。
最後にMyDNSの更新を設定します。MyDNSには最低でも8日に一度MyDSNのサイトにアクセスして、ウェブサーバのIPアドレスを通知する必要があります。これはcronに次の行を追加することで対応できます。
最下行に以下を追記します。
上の設定は、毎日23:58にwgetを使ってhttp://ipv4.mydns.jp/login.htmlにユーザMyDNS_ID、パスワードID_Passwordでログインするという設定です。
自動でセキュリティのみのアップデートを行うには、unattended-upgradesパッケージをインストールします。
これで/etc/apt/apt.confの下に20auto-upgrades、50unattended-upgradesが作成されます。50unattended-upgradesにアップデートの対象とするものが記載されており、デフォルトはセキュリティアップデートになっています。