Ubuntu18.04でmime-typeを追加する

今回はmhtmlファイルのアイコンをhtmlと同じアイコンにしたくて調べた。
下記のようなxmlファイルを作成する。

<?xml version="1.0" encoding="utf-8"?>
<mime-type xmlns="http://www.freedesktop.org/standards/shared-mime-info" type="application/mhtml">
  <comment>MHTML Web Achive</comment>
  <glob pattern="*.mhtml"/>
  <icon name="html"/>
</mime-type>

mime-typeのデータベースを更新する。

$ update-mime-database /home/user/.local/share/mime/

Ubuntu18.04が PCIe Bus Error: severity=Corrected, type=Physical Layer, id=00ea(Receiver ID) を吐きまくる

ある日、Thinkpad E480のUbuntu18.04をアップデートしたら、急に下記のようなエラーを約1秒ごとに吐き続けるようになってしまった。
GUIの動作には支障ない。原因はよくわからないが、とりあえず超じゃまなので止めたい。

Oct 22 09:02:45 host kernel: [  288.701027] pcieport 0000:00:1d.2: AER: Corrected error received: id=00ea
Oct 22 09:02:45 host kernel: [  288.701047] pcieport 0000:00:1d.2: PCIe Bus Error: severity=Corrected, type=Physical Layer, id=00ea(Receiver ID)
Oct 22 09:02:45 host kernel: [  288.701058] pcieport 0000:00:1d.2:   device [8086:9d1a] error status/mask=00000001/00002000
Oct 22 09:02:45 host kernel: [  288.701065] pcieport 0000:00:1d.2:    [ 0] Receiver Error         (First)
Oct 22 09:02:45 host kernel: [  288.914160] pcieport 0000:00:1d.2: AER: Corrected error received: id=00ea
Oct 22 09:02:45 host kernel: [  288.914176] pcieport 0000:00:1d.2: PCIe Bus Error: severity=Corrected, type=Data Link Layer, id=00ea(Receiver ID)
Oct 22 09:02:45 host kernel: [  288.914180] pcieport 0000:00:1d.2:   device [8086:9d1a] error status/mask=00000080/00002000
Oct 22 09:02:45 host kernel: [  288.914183] pcieport 0000:00:1d.2:    [ 7] Bad DLLP              
Oct 22 09:02:49 host kernel: [  292.271860] pcieport 0000:00:1d.2: AER: Corrected error received: id=00ea
Oct 22 09:02:49 host kernel: [  292.271865] pcieport 0000:00:1d.2: PCIe Bus Error: severity=Corrected, type=Physical Layer, id=00ea(Receiver ID)
Oct 22 09:02:49 host kernel: [  292.271867] pcieport 0000:00:1d.2:   device [8086:9d1a] error status/mask=00000001/00002000
Oct 22 09:02:49 host kernel: [  292.271869] pcieport 0000:00:1d.2:    [ 0] Receiver Error         (First)

grubの設定をいじる。
・PCI_MSIカーネル構成パラメーターが有効になっている場合、システム全体でMSI割り込みの使用を無効にする。
・PCIEAERカーネル構成パラメーターが有効になっている場合、PCIE拡張エラー報告を無効にする。

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pci=nomsi"
GRUB_CMDLINE_LINUX="pci=noaer"

設定ファイルを作成する。

# grub-mkconfig -o /boot/grub/grub.cfg

再起動したらエラーでなくなった。

Windows10にすべてのFreeIPAユーザーと同名のローカルユーザーを作成する

前提条件

この手順で設定したIPAサーバー、この手順で設定したWindows10を使用する。

・ IPAサーバーではexpectコマンドをインストール済み
・ Windows10には設定からsshdをインストール済み

スクリプトの流れ

① FreeIPAサーバーですべてのIPAユーザーを取得してカンマ区切りに加工する
② expectコマンドを使用してWindowsにsshで接続する
③ Windows上でユーザーの追加を行うスクリプトに「①」で取得したユーザーリストを送信する

IPAサーバーのスクリプト

cronで定期的に実行するとWindowsの管理が少し楽になるかもしれない。
Windowsの台数が多い場合はsamba4のActiveDirectory使ったほうが良い。

#!/bin/bash

# Kerberosユーザーをすべて取得する
# IPAユーザー以外でログインしている場合はkinitが必要
# echo 'password' | kinit admin
USERS=`ipa user-find | grep "User login:*" | sed "s/  User login: //g" | sed -z "s/\n/,/g"`

# Windowsクライアントにsshで接続して専用batファイルを実行する
# WindowsのIPアドレスは192.168.0.100
# Administratorのパスワードは12345678
HOST="192.168.0.100"
expect -c "
	spawn ssh administrator@$HOST
	expect \"password:\"
	send 12345678\\n
	expect \"Microsoft Windows\"
	send \"C:\\\\Script\\\\UpdateUserAccounts.bat \\\"$USERS\\\"\r\n\"
	expect \"ユーザーリストの更新が完了しました。\"
	send exit\r\n
	interact
"

Windows10のスクリプト

ここではローカルにスクリプト置いてるけど、samba共有に置いた方が管理しやすいかも。

:# ※引数として渡されるユーザーリストはカンマ区切りで末尾にもカンマが必要
@echo off
set parameters=%~1
set domain=LOCAL.EXAMPLE.COM

setlocal enabledelayedexpansion

:# 引数で渡されたリストでローカルにいないユーザーの作成
:# パスワードは実際のサインインには使用されないので固定値
:# パスワードの有効期限を無期限にする
:# 「Remote Desktop Users」グループに所属させる
set password=87654321
for %%P in (%parameters%) do (
	net user %%P 1>NUL 2>NUL
	if ERRORLEVEL == 1 (
		net user %%P %password% /add /expires:never /fullname:%%P@%domain% 1>NUL
		wmic useraccount where "Name='%%P'" set PasswordExpires=FALSE 1>NUL
		net localgroup "Remote Desktop Users" %%P /add 1>NUL
	)
)

endlocal

echo ユーザーリストの更新が完了しました。

Windows10にkerberos認証でサインインする

前提条件

・ Homeエディション
・ クライアントFQDNはwin01.local.example.com
・ クライアントのhostをKDC上で作成しておく
・ クライアントのkeytabを任意のパスワードで生成しておく
  (FreeIPAなら ipa-getkeytab -s dc1.local.example.com -p host/win01.local.example.com -k /etc/krb5.win01.keytab -P など)

PC名の変更

はじめにPC名をwin01にしておく。

認証サーバーの設定

コマンドプロンプトを管理者として起動し下記コマンドを実行する。

ksetup /setdomain LOCAL.EXAMPLE.COM
ksetup /setcomputerpassword keytab生成時に指定したパスワード
ksetup /addkdc LOCAL.EXAMPLE.COM dc1.local.example.com
ksetup /addkpasswd LOCAL.EXAMPLE.COM dc1.local.example.com
ksetup /mapuser * *

再起動と確認

Windowsを再起動して、フルコンピュータ名がwin01.local.example.comのようなFQDNになっていることを確認する。

暗号化の種類を構成

レジストリを編集して、Kerberosで許可する暗号化の種類を構成する。
RC4_HMAC_MD5・AES128_HMAC_SHA1・AES256_HMAC_SHA1を有効にするのが目的。
※gpedit.mscが使えるならGUIで設定しても良い

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Kerberos\Parameters]
"SupportedEncryptionTypes"=dword:0000001c

ローカルアカウントの作成

kerberos認証でサインインするユーザーと同名のローカルアカウントを作成する。
※実際の認証には使われないがパスワードは管理者側で何か設定した方が良い

実際のサインイン

サインインする際は「user@LOCAL.EXAMPLE.COM」のようにrealmをつけて行う。

IPAクライアント認証されたユーザーでsambaをcifsマウントする

前提条件

ここの手順で構築したサーバーを使用する
ここの手順で設定したクライアントを使用する

fstabに下記を追記する。

//samba.local.example.com/share /mnt/samba/share cifs vers=3.1.1,noauto,sec=krb5i,users,file_mode=0660,dir_mode=0770,nobrl 0 0

ログインしたipaユーザーはチケットを使用して下記コマンドでマウントできる。

$ mount /mnt/samba/share

Ubuntu18.04をIPAクライアントとして設定する

前提条件

この手順で設定したIPAサーバーを使用する
・IPAサーバーのIdMにWEBブラウザなどでクライアントhostを作成しておく

ホスト名をFQDNにする。

# hostnamectl set-hostname client01.local.example.com

FQDNでの名前解決をできるようにしておく。

127.0.0.1    client01.local.example.com

必要なパッケージのインストール。

# apt install freeipa-client

対話型のインストーラーを起動する。
※「–enable-dns-updates」はDNSへのIPアドレス自動更新を有効にするオプション

# ipa-client-install --enable-dns-updates

IPAユーザーのログイン時にホームディレクトリを自動生成する設定。

# pam-auth-update --enable mkhomedir

再起動して完了。

CentOS7でのFreeIPAサーバーの設定

前提条件

・ メインメモリが1GBだと失敗するので2GB程度は必要
・ プライマリのIPアドレスは192.168.0.10
・ セカンダリのIPアドレスは192.168.0.11

プライマリサーバーの設定

FQDNでホスト名を設定する。
※FQDNが192.168.0.10に名前解決できるようにしておく

# hostnamectl set-hostname ipa1.local.example.com

必要なパッケージをインストールする。

# yum install ipa-server ipa-server-dns

対話型のインストーラーを起動する。
※同時にbindも設定してもらう
※DNSフォワーダーも設定する
※そのほかは大体Enterで続行した

# ipa-server-install

ファイアウォールの例外を登録するよう促されるので登録する。
※サービス名で設定する場合は「ldap」ではなく「freeipa-ldap」なので注意
※freeipa-replicationはセカンダリを構築しない場合はいらない

# firewall-cmd --permanent --add-service={freeipa-ldap,freeipa-ldaps,freeipa-replication,dns,ntp,http,https}
# firewall-cmd --reload

参照するDNSサーバーを自身にする。

# nmcli connection modify コネクション名 ipv4.dns 192.168.0.10

初回ログイン時にホームディレクトリを自動生成するよう設定する。

# authconfig --enablemkhomedir --update

セカンダリサーバーの設定

プライマリのIdMにWEBブラウザでアクセスして、セカンダリのhostを追加。

セカンダリのホスト名をFQDNに変更する。
※FQDNが192.168.0.11に名前解決できるようにしておく

# hostnamectl set-hostname ipa2.local.example.com

必要なパッケージをインストールする。

# yum install ipa-server ipa-server-dns

IPAクライアントとして設定する。

# ipa-client-install

初回ログイン時にホームディレクトリを自動生成するよう設定する。

# authconfig --enablemkhomedir --update

ファイアウォールの例外を登録する。

# firewall-cmd --permanent --add-service={freeipa-ldap,freeipa-ldaps,freeipa-replication,dns,ntp,http,https}
# firewall-cmd --reload

レプリカインストールを実行する。
※プライマリからCA設定をコピーするため「–setup-ca」オプション指定
※DNSとしても動作させるため「–setup-dns」オプション指定

# ipa-replica-install --setup-ca --setup-dns --forwarder <forwarderのIPアドレス1> --forwarder <forwarderのIPアドレス2>

参照するDNSサーバーを自身にする。

# nmcli connection modify コネクション名 ipv4.dns 192.168.0.11

UbuntuServer18.04にPostgreSQL9.5をインストールする

標準のリポジトリにはないので、公式wikiを参考にインストールする。

リポジトリキーをインポートする。

# curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -

リポジトリを追加する。

# echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list
# apt update

インストール。

# apt install postgresql-9.5

サービスを起動する。

# systemctl start postgresql@9.5-main

postgresのパスワードを設定する。

# su postgres
$ psql
postgres=# alter user postgres with password 'password';
postgres=# \q