また古いサーバの構築です。昔に使われていたチャットサーバですね。今でいうところのslackに近いのかな。
CentOS 7のときは、パッケージがあったのですが、CentOS 8になって、パッケージが用意されていないみたいです。
[root@ace src]# dnf search ircd
メタデータの期限切れの最終確認: 0:12:40 時間前の 2020年02月25日 21時49分28秒 に 実施しました。
============================ 名前 & 概要 一致: ircd ============================
nagios-plugins-ircd.x86_64 : Nagios Plugin - check_ircd
=============================== 概要 一致: ircd ================================
lirc-drv-irman.x86_64 : lircd(8) plugin for handling IrMan devices.
[root@ace src]#
なので、ソースからコンパイルしてインストールします。
公式サイトからソースをgetしてコンパイル
今回インストールするのは、ngircdで公式サイトはこちらになります。
[root@ace ~]# cd /usr/local/src/
[root@ace src]# wget https://ngircd.barton.de/pub/ngircd/ngircd-25.tar.gz
--2020-02-25 22:00:12-- https://ngircd.barton.de/pub/ngircd/ngircd-25.tar.gz
ngircd.barton.de (ngircd.barton.de) をDNSに問いあわせています... 2001:470:1f0b:18e4::cafe, 95.208.52.79
ngircd.barton.de (ngircd.barton.de)|2001:470:1f0b:18e4::cafe|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 301 Moved Permanently
場所: https://arthur.barton.de/pub/ngircd/ngircd-25.tar.gz [続く]
--2020-02-25 22:00:13-- https://arthur.barton.de/pub/ngircd/ngircd-25.tar.gz
arthur.barton.de (arthur.barton.de) をDNSに問いあわせています... 2001:470:1f0b:18e4::cafe, 95.208.52.79
arthur.barton.de (arthur.barton.de)|2001:470:1f0b:18e4::cafe|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 527886 (516K) [application/x-gzip]
`ngircd-25.tar.gz' に保存中
ngircd-25.tar.gz 100%[===================>] 515.51K 174KB/s 時間 3.0s
2020-02-25 22:00:17 (174 KB/s) - `ngircd-25.tar.gz' へ保存完了 [527886/527886]
[root@ace src]#
[root@ace src]# tar xfz ngircd-25.tar.gz
[root@ace src]# cd ngircd-25
[root@ace ngircd-25]# ls
AUTHORS Makefile.am aclocal.m4 config.sub contrib man
COPYING Makefile.in ar-lib configure depcomp missing
ChangeLog NEWS autogen.sh configure.ac doc src
INSTALL README config.guess configure.ng install-sh
[root@ace ngircd-25]#
公式サイトから、ソースプログラムを/usr/local/srcにダウンロードして展開します。展開した中のINSTALLとかREADMEなんて名前のファイルにインストール方法などが書いてあるのでチェックです。
[root@ace ngircd-25]# cat INSTALL
:
省略
:
* Red Hat / Fedora based distributions:
yum install \
autoconf automake expect gcc glibc-devel gnutls-devel \
libident-devel make pam-devel tcp_wrappers-devel telnet zlib-devel
:
省略
:
- /usr/local/sbin/ngircd: executable server
- /usr/local/etc/ngircd.conf: sample configuration (if not already present)
- /usr/local/share/doc/ngircd/: documentation
- /usr/local/share/man/: manual pages
:
省略
:
[root@ace ngircd-25]#
事前に必要なパッケージは「autoconf automake expect gcc glibc-devel gnutls-devel libident-devel make pam-devel tcp_wrappers-devel telnet zlib-devel」ですね。今入っているパッケージを見ると
[root@ace ngircd-25]# dnf list installed autoconf automake expect gcc glibc-devel gnutls-devel \
> libident-devel make pam-devel tcp_wrappers-devel telnet zlib-devel
インストール済みパッケージ
gcc.x86_64 8.3.1-4.5.el8 @AppStream
glibc-devel.x86_64 2.28-72.el8_1.1 @BaseOS
make.x86_64 1:4.2.1-9.el8 @BaseOS
telnet.x86_64 1:0.17-73.el8 @AppStream
[root@ace ngircd-25]#
ちょっと足りませんね。でも必要のない機能もあるので、zlib-devel(ファイル圧縮用ライブラリ)だけインストールしておきました。
[root@ace ngircd-25]# ./configure --help
`configure' configures ngIRCd 25 to adapt to many kinds of systems.
Usage: ./configure [OPTION]... [VAR=VALUE]...
To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.
Defaults for the options are specified in brackets.
Configuration:
-h, --help display this help and exit
--help=short display options specific to this package
--help=recursive display the short help of all the included packages
-V, --version display version information and exit
-q, --quiet, --silent do not print `checking ...' messages
--cache-file=FILE cache test results in FILE [disabled]
-C, --config-cache alias for `--cache-file=config.cache'
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or `..']
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]
By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc. You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.
For better control, use the options below.
Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
--datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
--datadir=DIR read-only architecture-independent data [DATAROOTDIR]
--infodir=DIR info documentation [DATAROOTDIR/info]
--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
--mandir=DIR man documentation [DATAROOTDIR/man]
--docdir=DIR documentation root [DATAROOTDIR/doc/ngircd]
--htmldir=DIR html documentation [DOCDIR]
--dvidir=DIR dvi documentation [DOCDIR]
--pdfdir=DIR pdf documentation [DOCDIR]
--psdir=DIR ps documentation [DOCDIR]
Program names:
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM run sed PROGRAM on installed program names
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
Optional Features:
--disable-option-checking ignore unrecognized --enable/--with options
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--enable-silent-rules less verbose build output (undo: `make V=1')
--disable-silent-rules verbose build output (undo: `make V=0')
--disable-dependency-tracking speeds up one-time build
--enable-dependency-tracking do not reject slow dependency extractors
--disable-ircplus disable IRC+ protocol
--enable-ipv6 enable IPv6 protocol support
--enable-sniffer enable IRC traffic sniffer (enables debug mode)
--enable-debug show additional debug output
--enable-strict-rfc strict RFC conformance -- may break clients!
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--without-syslog disable syslog (autodetected by default)
--without-zlib disable zlib compression (autodetected by default)
--without-select disable select IO support (autodetected by default)
--without-poll disable poll support (autodetected by default)
--without-devpoll disable /dev/poll IO support (autodetected by
default)
--without-epoll disable epoll IO support (autodetected by default)
--without-kqueue disable kqueue IO support (autodetected by default)
--with-openssl enable SSL support using OpenSSL
--with-gnutls enable SSL support using gnutls
--with-tcp-wrappers enable TCP wrappers support
--with-ident enable "IDENT" ("AUTH") protocol support
--with-pam enable user authentication using PAM
--with-iconv enable character conversion using libiconv
Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
LIBS libraries to pass to the linker, e.g. -l<library>
CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
CPP C preprocessor
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
Report bugs to <ngircd-ml@ngircd.barton.de>.
ngIRCd home page: <http://ngircd.barton.de/>.
[root@ace ngircd-25]#
「./configure –help」コマンドで使えるオプションを検討します。IPv6とiconv(文字コード変換)だけは有効にしたほうがいいかな。
インストールディレクトリはコマンドや設定ファイルだけなので、/usr/localのままで良いでしょう。
ということで
[root@ace ngircd-25]# ./configure --enable-ipv6 --with-iconv
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
:
省略
:
ngIRCd 25 has been configured with the following options:
Host: x86_64-pc-linux-gnu
Compiler: gcc
Compiler flags: -g -O2 -pipe -W -Wall -Wpointer-arith -Wstrict-prototypes -fstack-protector -DSYSCONFDIR='"$(sysconfdir)"' -DDOCDIR='"$(docdir)"'
Libraries: -lz
'ngircd' binary: /usr/local/sbin
Configuration file: /usr/local/etc
Manual pages: /usr/local/share/man
Documentation: /usr/local/share/doc/ngircd
Syslog support: yes Enable debug code: no
zlib compression: yes IRC sniffer: no
Use TCP Wrappers: no Strict RFC mode: no
IDENT support: no IRC+ protocol: yes
IPv6 protocol: yes I/O backend: epoll(), select()
PAM support: no SSL support: no
libiconv support: yes
[root@ace ngircd-25]#
と、コンパイル環境は問題なく設定完了です。
[root@ace ngircd-25]# make
Making all in doc
make[1]: ディレクトリ '/usr/local/src/ngircd-25/doc' に入ります
Making all in src
make[2]: ディレクトリ '/usr/local/src/ngircd-25/doc/src' に入ります
make[2]: 'all' に対して行うべき事はありません.
:
:
make[1]: ディレクトリ '/usr/local/src/ngircd-25' に入ります
make[1]: 'all-am' に対して行うべき事はありません.
make[1]: ディレクトリ '/usr/local/src/ngircd-25' から出ます
[root@ace ngircd-25]#
[root@ace ngircd-25]# make install
Making install in doc
make[1]: ディレクトリ '/usr/local/src/ngircd-25/doc' に入ります
:
:
make[2]: ディレクトリ '/usr/local/src/ngircd-25' から出ます
make[1]: ディレクトリ '/usr/local/src/ngircd-25' から出ます
[root@ace ngircd-25]#
なんとなく、上手くインストールができました。
テキトーに環境設定
ircサーバは通常、他のサーバと接続してサーバ間でもチャットができるようにするのですが、ここでは他のサーバと連携しないので、誰にも迷惑をかけないということで、適当に設定しておきます。
[root@ace ngircd-25]# ls -l /usr/local/sbin/
合計 892
-rwxr-xr-x 1 root root 910248 2月 25 22:23 ngircd
[root@ace ngircd-25]#
[root@ace ngircd-25]# ls -l /usr/local/etc/
合計 16
-rw------- 1 root root 15212 2月 25 22:23 ngircd.conf
[root@ace ngircd-25]#
[root@ace ngircd-25]# cp -p /usr/local/etc/ngircd.conf /usr/local/etc/ngircd.con
f.orig
[root@ace ngircd-25]#
[root@ace ngircd-25]# cp -p /usr/local/etc/ngircd.conf /usr/local/etc/ngircd.con
f.orig
[root@ace ngircd-25]# vi /usr/local/etc/ngircd.conf
[root@ace ngircd-25]# diff /usr/local/etc/ngircd.conf /usr/local/etc/ngircd.conf.orig
28c28
< Name = irc.zeke.ne.jp
---
> Name = irc.example.net
32c32
< AdminInfo1 = ZEKE Network
---
> ;AdminInfo1 = Description
34c34
< AdminEMail = zeke@mail.zeke.ne.jp
---
> ;AdminEMail = admin@irc.server
42c42
< Info = ZEKE Network
---
> Info = Server Info Text
52c52
< MotdFile = /usr/local/etc/ngircd.motd
---
> ;MotdFile = /usr/local/etc/ngircd.motd
61c61
< Network = ZEKE_Network
---
> ;Network = aIRCnetwork
80c80
< ServerGID = ngircd
---
> ;ServerGID = 65534
87c87
< ServerUID = ngircd
---
> ;ServerUID = 65534
186c186
< DNS = no
---
> ;DNS = yes
191c191
< Ident = no
---
> ;Ident = yes
[root@ace ngircd-25]#
「/usr/local/etc/ngircd.conf」が設定ファイルなので、これを書き換えます。替えたのは名前の部分と、「MotdFile」(ユーザが接続したときに表示するメッセージ)とGID,UIDの指定と、DNSによる逆引きとIdent(ユーザ名の調査)を無効にしたことです。Identはconfigureで無効にしていますが、現行の記述をそのまま引き継いでます。
[root@ace ngircd-25]# vi /usr/local/etc/ngircd.motd
[root@ace ngircd-25]# cat /usr/local/etc/ngircd.motd
このIRCサーバーはZEKE Networkにて動いています。
サーバーの管理上の都合などにより予告なく停止や再立ち上げ
などを行なうことがあります。
channelやnicknameに関するトラブルなどは一切関知しません。
システムへの悪影響を与えること及びその他の理由などにより
管理上の判断によって種々の接続制限を行なうことがあります。
IRC関係のファイルについては、
ftp://ftp.kyoto.wide.ad.jp/IRC/
などをご参考下さい。
IRC関係のweb pageとして、次のものがあります。
http://irc.kyoto-u.ac.jp/
[root@ace ngircd-25]#
[root@ace ngircd-25]# groupadd -r ngircd
[root@ace ngircd-25]# adduser -d / -g ngircd -r -s /sbin/nologin ngircd
[root@ace ngircd-25]#
[root@ace ngircd-25]# grep ngircd /etc/passwd
ngircd:x:993:990::/:/sbin/nologin
[root@ace ngircd-25]#
「/usr/local/etc/ngircd.motd」を作っておきます。昔のものをそのまま使っているので、日本語メッセージの文字コードはISO-2022-JP(JIS)コードになってます。
また、ngircdのグループとユーザも作っておきます。
試しに動作確認
[root@ace ngircd-25]# /usr/local/sbin/ngircd --help
ngIRCd 25-CHARCONV+IPv6+IRCPLUS+SYSLOG+ZLIB-x86_64/pc/linux-gnu
Copyright (c)2001-2019 Alexander Barton (<alex@barton.de>) and Contributors.
Homepage: <http://ngircd.barton.de/>
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-f, --config <f> use file <f> as configuration file
-n, --nodaemon don't fork and don't detach from controlling terminal
-p, --passive disable automatic connections to other servers
-t, --configtest read, validate and display configuration; then exit
-V, --version output version information and exit
-h, --help display this help and exit
[root@ace ngircd-25]# /usr/local/sbin/ngircd -n
[14188:5 0] ngIRCd 25-CHARCONV+IPv6+IRCPLUS+SYSLOG+ZLIB-x86_64/pc/linux-gnu started.
[14188:6 0] Using configuration file "/usr/local/etc/ngircd.conf" ...
[14188:6 0] Running as user ngircd(993), group ngircd(990), with PID 14188.
[14188:6 0] Not running with changed root directory.
[14188:6 0] IO subsystem: epoll (hint size 100, initial maxfd 100, masterfd 3).
[14188:6 0] Now listening on [0::]:6667 (socket 9).
[14188:6 0] Now listening on [0.0.0.0]:6667 (socket 10).
とりあえず「ngircd -n」コマンドで立ち上げてみて、動作確認です。
ちゃんとつながって、日本語メッセージも正しく表示されるようですね。
自動起動設定をする
[root@ace ngircd-25]# vi /etc/systemd/system/ngircd.service
[root@ace ngircd-25]# cat /etc/systemd/system/ngircd.service
[Unit]
Description=Next Generation IRC Daemon
After=network.target
[Service]
ExecStart=/usr/local/sbin/ngircd -n
Restart=always
Type=simple
[Install]
WantedBy=multi-user.target
[root@ace ngircd-25]# systemctl enable ngircd
Created symlink /etc/systemd/system/multi-user.target.wants/ngircd.service → /etc/systemd/system/ngircd.service.
[root@ace ngircd-25]# systemctl start ngircd
[root@ace ngircd-25]# systemctl status ngircd
● ngircd.service - Next Generation IRC Daemon
Loaded: loaded (/etc/systemd/system/ngircd.service; enabled; vendor preset: >
Active: active (running) since Wed 2020-02-26 00:46:16 JST; 6s ago
Main PID: 14314 (ngircd)
Tasks: 1 (limit: 25027)
Memory: 556.0K
CGroup: /system.slice/ngircd.service
mq14314 /usr/local/sbin/ngircd -n
2月 26 00:46:16 ace.lo.zeke.ne.jp ngircd[14314]: [14314:6 0] Running as use>
2月 26 00:46:16 ace.lo.zeke.ne.jp ngircd[14314]: [14314:6 0] Not running wi>
2月 26 00:46:16 ace.lo.zeke.ne.jp ngircd[14314]: [14314:6 0] IO subsystem: >
2月 26 00:46:16 ace.lo.zeke.ne.jp ngircd[14314]: [14314:6 0] Now listening >
2月 26 00:46:16 ace.lo.zeke.ne.jp ngircd[14314]: [14314:6 0] Now listening >
2月 26 00:46:22 ace.lo.zeke.ne.jp ngircd[14314]: [14314:6 6] Accepted conne>
2月 26 00:46:22 ace.lo.zeke.ne.jp ngircd[14314]: [14314:5 6] User "ZEKEJapa>
2月 26 00:46:23 ace.lo.zeke.ne.jp ngircd[14314]: [14314:6 7] Shutting down >
2月 26 00:46:23 ace.lo.zeke.ne.jp ngircd[14314]: [14314:5 7] User "ZEKEJapa>
2月 26 00:46:23 ace.lo.zeke.ne.jp ngircd[14314]: [14314:6 7] Connection 11 >
[root@ace ngircd-25]#
こんな感じで、自動起動設定を書きました。
Firewallの穴あけ
[root@ace ngircd-25]# ss -natup|grep ircd
tcp LISTEN 0 10 0.0.0.0:6667 0.0.0.0:* users:(("ngircd",pid=14314,fd=10))
tcp ESTAB 0 0 192.168.1.1:6667 192.168.1.70:1923 users:(("ngircd",pid=14314,fd=11))
tcp LISTEN 0 10 [::]:6667 [::]:* users:(("ngircd",pid=14314,fd=9))
[root@ace ngircd-25]#
で、ポートの確認をして
[root@ace ngircd-25]# firewall-cmd --zone=public --permanent --add-service=irc
success
[root@ace ngircd-25]# firewall-cmd --reload
success
[root@ace ngircd-25]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dns irc
ports: 5500-5501/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@ace ngircd-25]#
[root@ace ngircd-25]# cat /usr/lib/firewalld/services/irc.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>IRC</short>
<description>An IRCd, short for Internet Relay Chat daemon, is server software that implements the IRC protocol.</description>
<port protocol="tcp" port="6667"/>
</service>
[root@ace ngircd-25]#
で、バッチリです。
おまけ
ircのbotとして、c言語で書かれている1996年製の
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
_/ HOFBOT IS DEDICATED TO DREAM DELTA GROUP _/
_/THIS HOFBOT V1.03F DOES NOT CONTAIN ANY BACKDOORS OR WHAT SO EVER. _/
_/THERE ARE TWO WAYS TO GET THE NEWEST HOFBOT VERSION OR OTHER HOFBOT _/
_/RELATED INFORMATION: _/
_/1. VIA BOT(S) IN #HOF OR #HOFBOT ON IRC(efnet or undernet) _/
_/2. HTTP://WWW.UG.CS.SUNYSB.EDU/~POONJ/HOFBOT.HTML -*HOF*- _/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
を使っているのだけど、CentOS 8でコンパイルすると
hofbot.c: 関数 ‘add_bot’ 内:
hofbot.c:113:15: エラー: expected identifier before ‘restrict’
thebots[i].restrict = 0;
こんなエラーが出るようになりました。CentOS 7では大丈夫だったので、gccの仕様が変わった模様。
どうも「restrict」を変数として使っていたのに、予約後にされてしまったっぽいので、変数名を「hof_restrict」に変更してみたら、コンパイルが通ってちゃんと動いているみたい。
うーむ、適当だ。
ちなみにこのプログラム、1日1回ログを取るためにファイルをオープンするのだけど、ログファイルのクローズをしないために、ファイルディスクリプタを食いつぶして、プロバイダの共用サーバを止めちゃったといういわくつきです。
自力でなんとかバグ修正して、自宅サーバで動かしてます。
お勧めのKindle本です!
コメント