Delegate の入手
・ 以下からソースコードをダウンロードします。
Delegate のコンパイル
makeの実施
ファイルを展開し、makeします。
# cd /var/tmp
# tar xvf delegate9.9.13.tar.gz
# cd delegate9.9.13
# make
makeを実施すると、以下のエラーが発生して、コンパイルが失敗します。
In file included from readycc.c:2:
readycc.c: 関数 ‘int ready_cc(FILE*)’ 内:
../include/fpoll.h:15:30: エラー: ‘FILE’ {aka ‘struct _IO_FILE’} has no member named ‘_egptr’
#define READYCC(fp) (fp->_egptr - fp->_gptr)
^~~~~~
readycc.c:8:14: 備考: in expansion of macro ‘READYCC’
else return READYCC(fp);
^~~~~~~
../include/fpoll.h:15:43: エラー: ‘FILE’ {aka ‘struct _IO_FILE’} has no member named ‘_gptr’
#define READYCC(fp) (fp->_egptr - fp->_gptr)
^~~~~
readycc.c:8:14: 備考: in expansion of macro ‘READYCC’
else return READYCC(fp);
^~~~~~~
readycc.c: 関数 ‘int ready_CC(FILE*)’ 内:
../include/fpoll.h:15:30: エラー: ‘FILE’ {aka ‘struct _IO_FILE’} has no member named ‘_egptr’
#define READYCC(fp) (fp->_egptr - fp->_gptr)
^~~~~~
readycc.c:13:8: 備考: in expansion of macro ‘READYCC’
rcc = READYCC(fp);
^~~~~~~
../include/fpoll.h:15:43: エラー: ‘FILE’ {aka ‘struct _IO_FILE’} has no member named ‘_gptr’
#define READYCC(fp) (fp->_egptr - fp->_gptr)
^~~~~
readycc.c:13:8: 備考: in expansion of macro ‘READYCC’
rcc = READYCC(fp);
^~~~~~~
make[4]: *** [Makefile.go:41: readycc.o] エラー 1
make[4]: ディレクトリ '/var/tmp/delegate9.9.13/rary' から出ます
make[3]: *** [Makefile:7: libx] エラー 2
make[3]: ディレクトリ '/var/tmp/delegate9.9.13/rary' から出ます
mkmake: ERROR LOG is left at /var/tmp/delegate9.9.13/rary/mkmake.err
mkmake: ERROR LOG is left at /var/tmp/delegate9.9.13/rary/mkmake.err
make[2]: *** [Makefile.go:1111: ../lib/library.a] エラー 2
make[2]: ディレクトリ '/var/tmp/delegate9.9.13/src' から出ます
make[1]: *** [Makefile:376: start0] エラー 2
make[1]: ディレクトリ '/var/tmp/delegate9.9.13/src' から出ます
mkmake: ERROR LOG is left at /var/tmp/delegate9.9.13/src/mkmake.err
mkmake: ERROR LOG is left at /var/tmp/delegate9.9.13/src/mkmake.err
make: *** [Makefile:77: all] エラー 2
そのため、以下の2つのファイルを修正し、再度、makeを実施します。
- delegate9.9.13/include/fpoll.h
- delegate9.9.13/include/ystring.h
修正1
delegate9.9.13/include/fpoll.h の 7行目の次に以下を追加
#define _LIBIO_H
修正2
delegate9.9.13/include/ystring.h の 1502行目の次に以下を追加
#pragma GCC diagnostic ignored "-Wparentheses"
#pragma GCC diagnostic ignored "-Wcomment"
#pragma GCC diagnostic ignored "-Wunused-result"
#pragma GCC diagnostic ignored "-Wunused-value"
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#pragma GCC diagnostic ignored "-Wformat-extra-args"
#pragma GCC diagnostic ignored "-Wnarrowing"
#pragma GCC diagnostic ignored "-Wstringop-overflow=" // for Pi
参照情報
https://stackoverflow.com/questions/62140615/failed-compile-delegate-raspbian
再度、makeの実施
# make
Delegateの起動確認
Delegateが使用するポート(TCPの8080)を開放します。
# firewall-cmd --zone=public --add-port=8080/tcp --permanent
# firewall-cmd --reload
Delegateを起動します。
# cd src
# ./delegated -P8080
以下のメッセージが表示され、起動することが出来ないです。
-- ERROR: can't link the SSL/Crypto library.
-- Hint: use -vl option to trace the required library,
--- find it (ex. libssl.so.X.Y.Z) under /usr/lib or /lib,
--- then set the library version as DYLIB='+,lib*.so.X.Y.Z'
<DeleGate/9.9.13> [3941] -P8080 READY
Delegateは、OpenSSL 1.1.x 以前の関数で実装されているため、1.0.xで廃止された関数でエラーとなるみたいです。そのため、OpenSSLの1.0.2uを別途準備して、Delegateを起動できるようにします。
OpenSSL 1.0.2uのソースコードの取得
以下からOpenSSL 1.0.2uのソースコードを取得します。
OpenSSL 1.0.2uをコンパイルします。
以下のコマンドを実施します。
# cd /var/tmp
# tar xvf openssl-1.0.2u.tar.gz
# cd openssl-1.0.2u
# ./config shared
# make
# make install
OpenSSL 1.0.2uは以下に格納されます。
/usr/local/ssl/bin/openssl
OpenSSLのライブラリは以下に格納されます。
/usr/local/ssl/lib
Delegateの配置
install.shファイルの修正
delegate9.9.13/install.shファイルを修正して、インストール先を変更します。
変更前 INST=inst
変更後 INST=/opt
installの実施
install を実施します。
# make install
# ./install
OpenSSL 1.0.2uライブラリのシンボリックリンクの作成
/opt/dg9_9_13/DGROOT/lib フォルダに openssl のライブラリのシンボリックリンクを作成します。
# ln -s /usr/local/ssl/lib/libcrypto.so.1.0.0 /opt/dg9_9_13/DGROOT/lib/libcrypto.so
# ln -s /usr/local/ssl/lib/libssl.so.1.0.0 /opt/dg9_9_13/DGROOT/lib/libssl.so
Delegateの起動確認
以下のコマンドを実施します。
# /opt/dg9_9_13/DGROOT/bin/dg9_9_13 -P8080
コマンドを実施すると以下のメッセージが表示されます。
#### loading default conf: /opt/dg9_9_13/DGROOT/bin/dg9_9_13.conf
<DeleGate/9.9.13> [48533] -P8080 READY
_execPath=/opt/dg9_9_13/DGROOT/bin/dg9_9_13
Config: Linux/4.18.0-348.23.1.el8_5.x86_64; FileSize-Bits=64/64,64/32,64,64; socket=87380/16384,++NAT; sockpair=212992/212992,1002++U; char=signed; fcF=B; thread=PThread/pthread,64/128; zlib=112,308024; pam=2; stty=tcsetattr/NA; regex=regex; addr=A/440780/7FFDA9ED8E58; fmem=2677/-1418/5751M
DGROOT=/opt/dg9_9_13/DGROOT
ADMIN=root@localhost.localdomain
AIST-Product-ID: 2000-ETL-198715-01, H14PRO-049, H15PRO-165, H18PRO-443
Copyright (c) 1994-2000 Yutaka Sato and ETL,AIST,MITI
Copyright (c) 2001-2014 National Institute of Advanced Industrial Science and Technology (AIST)
BLDSIGN=9.9.13:20220428202141--500:3f6d3795eba9135d:root@localhost.localdomain:-
HostID: No-HostId-Available
Loaded: OpenSSL 1.0.2u 20 Dec 2019
Loaded: Zlib 1.2.11
以下のコマンドでDelegateを停止させます。
# /opt/dg9_9_13/DGROOT/bin/dg9_9_13 -P8080 -Fkill
systemd のサービスとして起動させる
systemdのUnitファイルの作成
delegate.service という名前で作成します。
内容は以下の通りです。
[Unit]
Description=Delegate server daemon
[Service]
Type=forking
ExecStart=/opt/dg9_9_13/DGROOT/bin/dg9_9_13 -P8080
ExecStop=/opt/dg9_9_13/DGROOT/bin/dg9_9_13 -P8080 -Fkill
ExecReload=/opt/dg9_9_13/DGROOT/bin/dg9_9_13 -P8080 -Fkill -HUP
Restart=no
[Install]
WantedBy=multi-user.target
delegate.service ファイルを /etc/systemd/system にコピーします。
# cp delegate.service /etc/systemd/system
# chomod 755 /etc/systemd/system/delgate.service
Delegate サービスの起動
以下のコマンドでサービスを起動します。
# systemctl start delegate.service
サービスが正常に起動したかを確認します。
# systemctl status delgate.service
正常に起動した場合、以下のメッセージが表示されます。
● delegate.service - Delegate server daemon
Loaded: loaded (/etc/systemd/system/delegate.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2022-04-28 21:57:28 EDT; 2s ago
Process: 49014 ExecStart=/opt/dg9_9_13/DGROOT/bin/dg9_9_13 -P8080 (code=exited, status=0/SUCCESS)
Main PID: 49015 (dg9_9_13)
Tasks: 1 (limit: 36455)
Memory: 1.5M
CGroup: /system.slice/delegate.service
└─49015 /opt/dg9_9_13/DGROOT/bin/dg9_9_13 -{000}[RPM=0.00(0.0 0.0 0.0)]-P8080 -- ------
サービスを停止させます。
# systemctl stop delegate.service