xrdp でRDP Proxy ゲートウェイ を作る話(2) 〜RPMbuild編〜
前回まで
前フリとしてxrdpで RDP Proxy mode を使用する場合に必要なものを書きました。
対象ディストリビューション
ここでは RHEL8互換のRocky Linux 8.6 を対象とします。
(docker hubにある rockylinux:8.6 コンテナを利用して記事を書きました)
対象バージョン
記事執筆時点(2022/12/8)で、以下バージョンを対象とします。
- xrdp v0.9.20
- NeutrinoRDP git hash #836b738
build 環境の準備
build 環境をインストールします。
インストール直後の状態を想定しています。
rootユーザーにて実行してください。
# RockyLinux 8.6
dnf groupinstall -y "Development Tools"
dnf install -y epel-release
dnf --enablerepo powertools install -y gcc git cmake openssl-devel libX11-devel libXext-devel libXinerama-devel libXcursor-devel \
libXdamage-devel libXv-devel libxkbfile-devel alsa-lib-devel cups-devel libjpeg-turbo-devel libXrandr-devel turbojpeg-devel pcsc-lite-devel \
sudo wget which SDL2 hardlink imlib2-devel libXfont2-devel bash-completion tree sudo openssl pam-devel pkgconfig\(fuse\) pkgconfig\(pixman-1\) nasm checkpolicy selinux-policy-devel
useradd -m builduser
usermod -aG wheel builduser
echo "builduser:<任意のパスワード>" | chpasswd
echo "builduser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/builduser
su - builduser
cd ~
以降はビルド用ユーザ builduser
を使用します。
NeutrinoRDPのRPM作成
まず NeutrinoRDPをbuildします。
私のgithubのリポジトリからSRPMファイルをダウンロードしてください。
wget https://github.com/TOMATO-ONE/xrdp-proxy/raw/devel/centos/el8/SRPMS/neutrinordp-git836b738-1.el8.src.rpm
SRPMをインストールします。自動的にrpmbuildディレクトリが生成されてsourceファイルとSPECファイルが展開されます。
rpm -ivh ./neutrinordp-git836b738-1.el8.src.rpm
SPECファイルを元にrpmbuildコマンドで ソースコードをbuildし、rpm ファイルを生成します。
rpmbuild -bb --clean ~/rpmbuild/SPECS/neutrinordp.spec
正常にbuildできた場合、以下のようなツリーになっているはずです。
[builduser@fb9656c1967e ~]$ tree
.
├── neutrinordp-git836b738-1.el8.src.rpm
└── rpmbuild
├── BUILD
├── BUILDROOT
├── RPMS
│ └── x86_64
│ ├── neutrinordp-devel-git836b738-1.el8.x86_64.rpm
│ ├── neutrinordp-libs-git836b738-1.el8.x86_64.rpm
│ ├── neutrinordp-plugins-standard-git836b738-1.el8.x86_64.rpm
│ └── neutrinordp-xfreerdp-git836b738-1.el8.x86_64.rpm
├── SOURCES
│ ├── CMakeLists.txt.patch
│ └── neutrinolabs-neutrinordp-836b738.tar.gz
├── SPECS
│ └── neutrinordp.spec
└── SRPMS
8 directories, 8 files
xrdp のRPM作成
buildした NeutrinoRDPをインストールします。
xrdpのbuildには neutrinordp-devel
と neutrinordp-libs
が必要です。
cd ~/rpmbuild/RPMS/x86_64/
sudo dnf localinstall -y ./neutrinordp-devel-git836b738-1.el8.x86_64.rpm ./neutrinordp-libs-git836b738-1.el8.x86_64.rpm
cd ~
私のgit hubのリポジトリから RDP Proxy を有効にした xrdp のSRPMをダウンロードしてインストールしてください。
wget https://github.com/TOMATO-ONE/xrdp-proxy/raw/devel/centos/el8/SRPMS/xrdp-0.9.20-1.el8.src.rpm
rpm -ivh xrdp-0.9.20-1.el8.src.rpm
EPELにて提供している xrdp RPMパッケージとの主な変更点は
- configure オプションに
--enable-neutrinordp
を追加 - 依存パッケージから
tigervnc-server-minimal
xorg-x11-xinit
を削除。
→ これらは Linux Desktopに RDPでGUIログインする場合には必要ですが、RDP Proxyだけの動作には不要です。
SPECファイルを元にrpmbuildコマンドで ソースコードをbuildし、rpm ファイルを生成します。
rpmbuild -bb --clean ~/rpmbuild/SPECS/xrdp.spec
正常にbuildできた場合、最終的に以下の tree構成になります。
tree
.
├── neutrinordp-git836b738-1.el8.src.rpm
├── rpmbuild
│ ├── BUILD
│ ├── BUILDROOT
│ ├── RPMS
│ │ └── x86_64
│ │ ├── neutrinordp-devel-git836b738-1.el8.x86_64.rpm
│ │ ├── neutrinordp-libs-git836b738-1.el8.x86_64.rpm
│ │ ├── neutrinordp-plugins-standard-git836b738-1.el8.x86_64.rpm
│ │ ├── neutrinordp-xfreerdp-git836b738-1.el8.x86_64.rpm
│ │ ├── xrdp-0.9.20-1.el8.x86_64.rpm
│ │ ├── xrdp-debuginfo-0.9.20-1.el8.x86_64.rpm
│ │ ├── xrdp-debugsource-0.9.20-1.el8.x86_64.rpm
│ │ ├── xrdp-devel-0.9.20-1.el8.x86_64.rpm
│ │ ├── xrdp-rdpproxy-0.9.20-1.el8.x86_64.rpm
│ │ ├── xrdp-rdpproxy-debuginfo-0.9.20-1.el8.x86_64.rpm
│ │ └── xrdp-selinux-0.9.20-1.el8.x86_64.rpm
│ ├── SOURCES
│ │ ├── CMakeLists.txt.patch
│ │ ├── README.Fedora
│ │ ├── neutrinolabs-neutrinordp-836b738.tar.gz
│ │ ├── openssl.conf
│ │ ├── xrdp-0.9.10-scripts-libexec.patch
│ │ ├── xrdp-0.9.16-arch.patch
│ │ ├── xrdp-0.9.17-xrdp-ini.patch
│ │ ├── xrdp-0.9.18-vnc-uninit.patch
│ │ ├── xrdp-0.9.20-sesman-ini.patch
│ │ ├── xrdp-0.9.20.tar.gz
│ │ ├── xrdp-0.9.4-service.patch
│ │ ├── xrdp-0.9.6-script-interpreter.patch
│ │ ├── xrdp-0.9.9-sesman.patch
│ │ ├── xrdp-polkit-1.rules
│ │ ├── xrdp-sesman.pamd
│ │ ├── xrdp.logrotate
│ │ ├── xrdp.sysconfig
│ │ └── xrdp.te
│ ├── SPECS
│ │ ├── neutrinordp.spec
│ │ └── xrdp.spec
│ └── SRPMS
└── xrdp-0.9.20-1.el8.src.rpm
インストール
RDP Proxyとして動作させるためには 生成されたrpmファイルのうち、以下のファイルが必要です。
neutrinordp-libs-git836b738-1.el8.x86_64.rpm
xrdp-0.9.20-1.el8.x86_64.rpm
xrdp-rdpproxy-0.9.20-1.el8.x86_64.rpm
xrdp-selinux-0.9.20-1.el8.x86_64.rpm
インストールする際には以下のコマンドで
sudo dnf install -y neutrinordp-libs-git836b738-1.el8.x86_64.rpm xrdp-0.9.20-1.el8.x86_64.rpm xrdp-rdpproxy-0.9.20-1.el8.x86_64.rpm xrdp-selinux-0.9.20-1.el8.x86_64.rpm
# 自動起動設定を行いdaemonとして起動する。
systemctl enable xrdp
systemctl start xrdp
# Firewallで3389/tcpを受信接続できるようにする。
firewall-cmd --add-port=3389/tcp
firewall-cmd --runtime-to-permanent
まとめ
RDP Proxy mode を有効にしたxrdpのrpmbuild方法をご紹介しました。
次回予告
debian系ディストリビューションでのbuild方法をご紹介する予定です。