FreeIPAサーバーを4.6.8から4.9.6へ移行する

移行元

・ ディストリビューション: CentOS 7.9
・ ホスト名: ipa1.local.example.com
・ IPアドレス: 192.168.0.10
・ IPAサーバー: 4.6.8

移行先

・ ディストリビューション: AlmaLinux 8.5
・ ホスト名: newipa1.local.example.com
・ IPアドレス: 192.168.0.20
・ IPAサーバー: 4.9.6

重要な留意事項

移行先の4.9.6にはca設定を含むレプリカが作成できない不具合があるため、試した限り移行元から移行先へのレプリカ作成は一度しか実行できない。一度でも4.9.6でレプリカを作成した場合、それ以降は4.6.8のca設定を含むレプリカを4.9.6で作成できなくなった。

4.9.6への移行を実行する際に注意すること

この作業手順でca設定などが消失しても運営者は一切責任とりません

・移行元のバックアップを作成してから実行する
・移行先のFQDNは本番プライマリサーバーと同一にする

移行元と移行先のFQDNが同一の場合

4.9.6のレプリカ作成前なら4.6.8同士のレプリカを作成できるので、それを利用して4.6.8のレプリカを作成し、プライマリに変更して移行元とする。
参考ページ: dna範囲の確認方法

① 一時的に移行元と同じ4.6.8でcaを含むバックアップ用のレプリカを作成する
② IdMのWebUIなどで「IPA CA renewal master」をバックアップ用のレプリカに変更する
③ 移行元のdna範囲を控える
④ 移行先と同じFQDNのIPAサーバーを削除する
⑤ さっきの記事を参考に控えたdna範囲をバックアップ用のレプリカにセットする

移行元(CentOS 7.9)での作業

移行元でファイアウォールを無効化しておく。使用しているポートが違うのか例外設定していても失敗する。

# systemctl stop firewalld

移行元のIdMにWEBブラウザでアクセスして、移行先のhostを追加する。

移行先(AlmaLinux 8.5)での作業

移行先のホスト名をFQDNに変更する。

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

参照するDNSサーバーを移行元IPAサーバーにする。

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

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

# dnf install @idm:DL1
# dnf 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設定を含むレプリカを作成する。
※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.20
# nmcli connection up コネクション名

「IPA CA renewal master」を移行先に変更する。

# kinit admin
# ipa config-mod --ca-renewal-master-server newipa1.local.example.com

移行元のdna範囲を確認する。
※必要に応じて予め「kinit admin」で認証する

# ipa-replica-manage dnarange-show

確認した移行元のdna範囲を移行先にセットする。
※必要に応じて予め「kinit admin」で認証する

# ipa-replica-manage dnarange-set newipa1.local.example.com 1304400077-1304599999

FreeIPAサーバーのdna範囲を再セットする

前提条件

FreeIPAのバージョンは4.6.8、一時的に普通のPCでipa98/ipa99というFreeIPAサーバーを立てて、移行作業後に本番で使うサーバー機でipa01/ipa02をレプリカにして、何も考えずにマルチマスターだからと思って、最初に作ったipa98/ipa99をIdMで削除して、しばらく認証されてるから良いと思ってたら新しいユーザー追加できなかった際の対応内容です。下記のエラーが発生しました。
Allocation of a new value for range cn=posix ids,cn=distributed numeric assignment plugin,cn=plugins,cn=config failed! Unable to proceed.

対応内容

現在のipa01とipa02のdna範囲を確認する。

# kinit admin
# ipa-replica-manage dnarange-show

dna範囲が設定されていなかった。

ipa01.local.example.com: No range set
ipa02.local.example.com: No range set

dnarange-setで設定できそうだけど、設定する範囲を知りたいので、消してしまったサーバーの残っていた設定ファイルをfindとgrepで探索してたら、それっぽいファイルを発見した。IdMと見比べても矛盾していなさそう。

…
dnaMaxValue: 1304599999
dnaNextValue: 1304400063
…

下記のコマンドでdnaを範囲を設定したら無事にユーザーを追加できた。

# ipa-replica-manage dnarange-set ipa01.local.example.com 1304400063-1304599999

PostgreSQL10ストリーミングレプリケーション設定(CentOS7)

CentOS7.9を使用。

2台構成

host:sv1 ip:192.168.0.100 略称:プライマリ
host:sv2 ip:192.168.0.101 略称:セカンダリ

プライマリとセカンダリの共通設定

インストールする。

# yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# yum install postgresql10-server postgresql10-devel postgresql10-contrib

ファイアウォールに例外を追加する。

# firewall-cmd --add-service=postgresql --permanent
# firewall-cmd --reload

データベースを初期化してデータベースクラスタを作成する。

# postgresql-10-setup initdb

サービスを有効化する。

# systemctl enable postgresql-10

プライマリの設定

サービスを起動する。

# systemctl start postgresql-10

レプリケーション用ユーザーを作成する。

# su postgres
$ psql
=# CREATE USER replication_user REPLICATION PASSWORD 'password';
=# \q

外部からの通信を許可。最下部に下記を追記する。

host    replication    replication_user    192.168.0.0/24    md5

postgresql.confを編集して下記8行を変更する。
※synchronous_commitはシステム要件によって変更した方が良い

listen_addresses = '*'
wal_level = hot_standby
fsync = on
synchronous_commit = off
wal_sync_method = fsync
max_wal_senders = 2  ※プライマリを含んだレプリケーションサーバーの数を入れる
wal_keep_segments = 32  ※8~32が目安らしい
synchronous_standby_names = '*'

ついでに下記設定値がシステム要件に合っているか確認する。

max_connections = 300  ※同時接続数
shared_buffers = 1024MB  ※物理メモリの1/4程度
work_mem = 8MB  ※物理メモリの1/500程度だが最大8MB
effective_cache_size = 2048MB  ※物理メモリの1/2程度

サービスを再起動する。

# systemctl restart postgresql-10

セカンダリの設定

postgresqlサービスが停止した状態でdataを空にする。

# rm -r -f /var/lib/pgsql/10/data/*

先程作成したレプリケーション用ユーザーを使用してプライマリからデータをコピーする。
※-Rオプションはrecovery.confを自動作成する指定
※-Pオプションは進捗を表示する指定

# su postgres
$ pg_basebackup -R -h 192.168.0.100 -p 5432 -U replication_user -D /var/lib/pgsql/10/data/ -P

/var/lib/pgsql/10/data/内のすべてのファイルの所有者/所有グループがpostgresになっているか確認する。

ll /var/lib/pgsql/10/data/

/var/lib/pgsql/10/data/postgresql.confを編集して設定を変更する。

hot_standby = on

postgresqlサービスを起動する。

# systemctl start postgresql-10

プライマリサーバーで下記SQLを実行するとレプリケーションされているか確認できる。

SELECT * FROM pg_stat_replication;

フェイルオーバーする際はセカンダリで下記コマンドを実行する。

# su postgres
$ pg_ctl promote -D /var/lib/pgsql/10/data/

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

CentOS7にPHP7.3とMariaDB5.5をインストール

前提条件

今回の環境はCentOS7.6をクリーンインストールして、SELinuxを無効化してある環境で行う手順です。また、mariadbはローカルからのみ利用する。

手順

EPELリポジトリとRemiリポジトリを追加する。

# yum install epel-release
# yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

Apacheとmariadbをインストールする。

# yum install httpd php73-php mariadb-server php73-php-mysqlnd

mariadbの文字コードをutf8にする。

[mysqld]
character-set-server = utf8

mariadbの初期設定をする。

systemctl enable mariadb
systemctl start mariadb
mysql_secure_installation

CentOS7+Smart-UPS750で停電時の自動シャットダウン設定

環境

・ CentOS7 × 2台
・ APC Smart-UPS 750 LCD 100V SMT750J E × 1台
・ USBケーブルで接続

プライマリー設定

UPSをUSBで接続しているサーバーにapcupsdをインストールする。

# yum install epel-release
# yum install apcupsd

認識されているデバイスを確認する。
※hiddev0〜15

$ dmesg

設定ファイルの下記の箇所を編集する。DEVICEの番号は前の手順で確認した番号に。

UPSCABLE usb
UPSTYPE usb
DEVICE /dev/usb/hiddev0〜15
NISIP 0.0.0.0
TIMEOUT 90

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

# firewall-cmd --permanent --add-port=3551/tcp
# firewall-cmd --reload

サービスを有効化して起動する。

# systemctl enable apcupsd
# systemctl start apcupsd

状態を確認してSTATUSがONLINEとなっていれば正常。

$ apcaccess

セカンダリー設定

セカンダリーサーバーにもapcupsdをインストールする。

# yum install epel-release
# yum install apcupsd

設定ファイルの下記の箇所を編集する。DEVICEにはプライマリーのIPアドレスとポート番号を指定。

UPSCABLE ether
UPSTYPE net
DEVICE 192.168.0.10:3551
TIMEOUT 60

サービスを有効化して起動する。

# systemctl enable apcupsd
# systemctl start apcupsd

状態を確認してSTATUSがONLINEとなっていれば正常。

$ apcaccess

CentOS7のSANEを利用してGT-S630のスキャンをCLIで行う

はじめにドライバーをここからダウンロードしてインストールする。

SANEをインストールする。

# yum install sane-backgrounds

そのままでは権限の問題でroot以外ではデバイスが利用できないので、専用グループに権限を与えるudevルールを作成する。
まずは専用グループを作成して、使用するユーザーを加える。

# groupadd scanner
# usermod test-user -a -G scanner

「lsusb」コマンドでベンダーIDとプロダクトIDを調べる。
下記の結果の場合はベンダーIDが04b8でプロダクトIDが0142になる。

Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 002: ID 1c4f:0002 SiGma Micro Keyboard TRACER Gamma Ivory
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 04b8:0142 Seiko Epson Corp. GT-F730 [GT-S630/Perfection V33/V330 Photo]
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

調べたベンダーIDとプロダクトIDを使用して下記ファイルを作成する。

ATTRS{idVendor}=="ベンダーID", ATTRS{idProduct}=="プロダクトID", MODE="0664", GROUP="scanner", ENV{libsane_matched}="yes"

あとは下記のようにCLIでスキャンできる。
※ 画質やコントラストの調整をする場合はxsaneをインストールすると便利

$ scanimage --format tiff --mode color --resolution 300 --contrast 35 > /home/test-user/Pictures/test.tiff

VPNでSoftEtherVPNサーバー自身(CentOS7)にアクセスする

NICが2枚必要なのでAmazonでUSB接続のNICを購入。

ネットワーク設定する。

# nmcli connection modify enp0s3f3u1 ipv4.method manual
# nmcli connection modify enp0s3f3u1 ipv4.addresses "0.0.0.0/32"
# nmcli connection modify enp0s3f3u1 connection.autoconnect yes
# nmcli connection up enp0s3f3u1

GUIの設定ツールからenp0s3f3u1にブリッジするように設定変更して完了。