SoftEther VPN のCentOS7 用 rpm ファイルを作成する 

# はじめに

CentOS7 のローカルビルド環境を用意し、SoftEther VPN をソースコードからビルドして rpm パッケージを作成します。

いわゆるオレオレパッケージの作成です。個人的にはオレオレパッケージはできるだけ作成しない方針なのですが、ちょっと自分に合ったものが発見できなかったため、作成することにしました。

rpm ファイルを作成するコマンドはいくつかありますが、なかなか調子のよいファイルを作成できなかったため、ここでは真面目に rpmbuild の spec ファイルを用意してビルドします。

SoftEther VPN には centos 用の spec ファイルが同梱されていますので、今回はそれをベースとして使わせていただき、少し独自の調整をしました。

バージョンに関しては、適切最新版などに読み替えてください。


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

rpmbuild の実行と、Softether VPN のコンパイルに必要なパッケージをインストールします。

```:console
# yum install -y make gcc rpm-build wget ncurses-devel openssl-devel readline-devel
```

rpmbuild に必要なディレクトリを作成します。

```:console
$ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
$ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
```

# rpm ファイルの作成

www.softether-download.com より SoftEther VPN を入手し(giuhub でもよいと思います)、rpmbuild でビルドできるようにファイルを配置します。

```:console
$ cd ~/rpmbuild/SOURCES
$ wget http://www.softether-download.com/files/softether/v4.28-9669-beta-2018.09.11-tree/Source_Code/softether-src-v4.28-9669-beta.tar.gz
```

spec ファイルを編集します。元となるファイルは `softether-src-v4.28-9669-beta.tar.gz` を解凍したディレクトリ中にあります。今回は以下のように修正しました。

簡単に修正内容を挙げますと……

* バージョンの調整
* init スクリプトの利用を廃止し、systemd 設定ファイルを利用するように修正
* %post、%postun、%preun　設定の廃止。

最後のは重要視するかたも多い気がするので、気になるかたは修正を入れる方がいいと思います。

```:~/rpmbuild/SPECS/softethervpn.spec
%define majorversion 4
%define minorversion 28
%define buildversion 9669
%define dateversion 2018.09.11
%define buildrelease beta

Name:           softethervpn
Version:        %{majorversion}.%{minorversion}.%{buildversion}
Release:        1%{?dist}
Summary:        An Open-Source Free Cross-platform Multi-protocol VPN Program

Group:          Applications/Internet
License:        GPLv2
URL:            http://www.softether.org/
Source0:        http://www.softether-download.com/files/softether/v%{majorversion}.%{minorversion}-%{buildversion}-%{buildrelease}-%{dateversion}-tree/Source_Code/softether-src-v%{majorversion}.%{minorversion}-%{buildversion}-%{buildrelease}.tar.gz

BuildRequires:  ncurses-devel
BuildRequires:  openssl-devel
BuildRequires:  readline-devel

Requires(post):         chkconfig
Requires(postun):       initscripts
Requires(preun):        chkconfig
Requires(preun):        initscripts

%description
SoftEther VPN is one of the world's most powerful and easy-to-use multi-protocol VPN software. It runs on Windows, Linux, Mac, FreeBSD, and Solaris.

%prep
%setup -q -n v%{majorversion}.%{minorversion}-%{buildversion}
sed -e 's/\/opt\//\/usr\//g' systemd/softether-vpnserver.service > systemd/softether-vpnserver.service.new
sed -e 's/\/opt\//\/usr\//g' systemd/softether-vpnbridge.service > systemd/softether-vpnbridge.service.new
sed -e 's/\/opt\//\/usr\//g' systemd/softether-vpnclient.service > systemd/softether-vpnclient.service.new

%build
%ifarch i386 i686
cp centos/SOURCES/linux_32bit.mak Makefile
%else
cp centos/SOURCES/linux_64bit.mak Makefile
%endif
make

%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/lib/systemd/system/multi-user.target.wants/
install -m 755 -d $RPM_BUILD_ROOT/usr/bin/
install -m 755 centos/SOURCES/scripts/vpnserver $RPM_BUILD_ROOT/usr/bin/vpnserver
install -m 755 centos/SOURCES/scripts/vpnbridge $RPM_BUILD_ROOT/usr/bin/vpnbridge
install -m 755 centos/SOURCES/scripts/vpnclient $RPM_BUILD_ROOT/usr/bin/vpnclient
install -m 755 centos/SOURCES/scripts/vpncmd $RPM_BUILD_ROOT/usr/bin/vpncmd
install -m 644 systemd/softether-vpnserver.service.new $RPM_BUILD_ROOT/usr/lib/systemd/system/softether-vpnserver.service
install -m 644 systemd/softether-vpnbridge.service.new $RPM_BUILD_ROOT/usr/lib/systemd/system/softether-vpnbridge.service
install -m 644 systemd/softether-vpnclient.service.new $RPM_BUILD_ROOT/usr/lib/systemd/system/softether-vpnclient.service

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root,-)
%{_usr}/bin/vpnserver
%{_usr}/bin/vpnbridge
%{_usr}/bin/vpnclient
%{_usr}/bin/vpncmd
%{_usr}/vpnserver/hamcore.se2
%{_usr}/vpnserver/vpnserver
%{_usr}/vpnbridge/hamcore.se2
%{_usr}/vpnbridge/vpnbridge
%{_usr}/vpnclient/hamcore.se2
%{_usr}/vpnclient/vpnclient
%{_usr}/vpncmd/hamcore.se2
%{_usr}/vpncmd/vpncmd
%{_usr}/vpnserver/
%{_usr}/vpnbridge/
%{_usr}/vpnclient/
%{_usr}/vpncmd/
%{_usr}/lib/systemd/system/softether-vpnserver.service
%{_usr}/lib/systemd/system/softether-vpnbridge.service
%{_usr}/lib/systemd/system/softether-vpnclient.service
%doc AUTHORS.TXT BUILD_UNIX.TXT BUILD_WINDOWS.TXT ChangeLog ChangeLog.txt LICENSE LICENSE.TXT README README.TXT THIRD_PARTY.TXT WARNING.TXT

#%post
#systemctl enable softether-vpnserver

#%postun
#if [ "$1" -ge "1" ]; then
#       /sbin/service vpnserver condrestart >/dev/null 2>&1 || :
#fi

#%preun
#if [ $1 -eq 0 ]; then
#        systemctl stop softether-vpnserver
#        systemctl disable softether-vpnserver
#fi

%changelog
* Wed Sep 30 2015 Jeff Tang <mrjefftang@gmail.com> - 4.19.9582-1
- Update upstream to 4.19.9582-beta

* Wed Sep 30 2015 Jeff Tang <mrjefftang@gmail.com> - 4.19.9577-1
- Update upstream to 4.19.9577

* Wed Jan 29 2014 Dexter Ang <thepoch@gmail.com> - 4.04.9412-2
- Made initscript more Fedora/RH-like.
- initscript currently using killall. Need to fix this.

* Tue Jan 21 2014 Dexter Ang <thepoch@gmail.com>
- Initial release
```

rpm ファイルを作成します

```:console
$ rpmbuild -ba --clean ~/rpmbuild/SPECS/softethervpn.spec
```

成功すると `~/rpmbuild/RPMS` ディレクトリに rpm ファイルが生成されていると思います。