はじめに
CentOS7 のローカルビルド環境を用意し、SoftEther VPN をソースコードからビルドして rpm パッケージを作成します。
いわゆるオレオレパッケージの作成です。個人的にはオレオレパッケージはできるだけ作成しない方針なのですが、ちょっと自分に合ったものが発見できなかったため、作成することにしました。
rpm ファイルを作成するコマンドはいくつかありますが、なかなか調子のよいファイルを作成できなかったため、ここでは真面目に rpmbuild の spec ファイルを用意してビルドします。
SoftEther VPN には centos 用の spec ファイルが同梱されていますので、今回はそれをベースとして使わせていただき、少し独自の調整をしました。
バージョンに関しては、適切最新版などに読み替えてください。
必要パッケージのインストール
rpmbuild の実行と、Softether VPN のコンパイルに必要なパッケージをインストールします。
# yum install -y make gcc rpm-build wget ncurses-devel openssl-devel readline-devel
rpmbuild に必要なディレクトリを作成します。
$ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
$ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
rpm ファイルの作成
www.softether-download.com より SoftEther VPN を入手し(giuhub でもよいと思います)、rpmbuild でビルドできるようにファイルを配置します。
$ 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 設定の廃止。
最後のは重要視するかたも多い気がするので、気になるかたは修正を入れる方がいいと思います。
%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 ファイルを作成します
$ rpmbuild -ba --clean ~/rpmbuild/SPECS/softethervpn.spec
成功すると ~/rpmbuild/RPMS
ディレクトリに rpm ファイルが生成されていると思います。