はじめに
まじでCentOS6、ひいてはRedHatに殺意を覚える内容となっている。大体2009年とかでバージョンが止まってるものが多すぎる。今2017年だぞ?8年前とかもはや旧石器時代だ。
以下のビルド手順はArch Linux RepositoryおよびArch User RepositoryのPKGBUILDに大いにお世話になっている。これなしでは挫折したであろうこと疑いない。
なぜgitのビルドが必要か
実は理科大は今年Linux環境がCentOS5からCentOS6になった。なんでCentOS7じゃないんだよという話は
yumetodo.hateblo.jp
でしたので割愛して、その影響で今年からgitが使えるようになった。人権がある、そう思っていた。
ところが
$ git --version
git version 1.7.1
となる。1.7.1
だぁ?時代は2.x
だぞ?
しかも困ったことがある。
https://help.github.com/articles/https-cloning-errors/
によれば
Check your Git version
There’s no minimum Git version necessary to interact with GitHub, but we’ve found version 1.7.10 to be a comfortable stable version that’s available on many platforms. You can always download the latest version on the Git website.
1.7.10
以上が必要らしい。Git使うのにGithubにpushできないとか人権がない(fechはできる)。
まだgitがビルドできると思っていた頃の記録
どういうわけか~/.bashrc
のwrite permissionが無いので大学のPCのWindows上で~/.bashrc
の中身をコピーした改行コードがLF
のテキストファイルを作成し、powershellとかコマンドプロンプトで
copy a.sh .bashrc
とかする。するとwrite permissionとexecution permissionが手に入る。
ここまでやればあとはssh越しでもできる。
下準備
cd ~
mkdir -P local
それから~/.bashrc
に
export PATH=/home/232/2314090/local/bin:$PATH
export LD_LIBRARY_PATH='/home/232/2314090/local/lib:$LD_LIBRARY_PATH'
export PKG_CONFIG_PATH='/home/232/2314090/local/lib/pkgconfig:$PKG_CONFIG_PATH'
を追記して
source ~/.bashrc
しておく。
cmake
cmakeが2.8.12.2
とか古すぎてやってられないので、公式から新しくbinaryを取ってくる。
cd /dev/shm
wget https://cmake.org/files/v3.9/cmake-3.9.0-rc3-Linux-x86_64.sh
chmod +x cmake-3.9.0-rc3-Linux-x86_64.sh
./cmake-3.9.0-rc3-Linux-x86_64.sh
くっそ長いライセンス同意文を慎重に読み飛ばして、Do you accept the license?
にy
、ついでDo you want to include the subdirectory
にn
。そうしたら
source ~/.bashrc
する。これを忘れると
CMake Error: Could not find CMAKE_ROOT !!!
CMake has most likely not been installed correctly.
Modules directory not found in
/home/232/2314090/local/bin
セグメンテーション違反です (コアダンプ)
とか怒られる。
stackoverflow.com
zlib
cd /dev/shm
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -xf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure --prefix=/home/232/2314090/local
make
make install
どういうわけかpkgconfigがぶっ壊れているので自力で書き換える。
vim ~/local/lib/pkgconfig/zlib.pc
などして
prefix=~/local
となっているのを
prefix=/home/232/2314090/local
にすればよい。
openssl
cd /dev/shm
wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz
tar -xf openssl-1.1.0f.tar.gz
cd openssl-1.1.0f
./config --prefix=/home/232/2314090/local --with-zlib-include=/home/232/2314090/local/include/ --with-zlib-lib=/home/232/2314090/local/lib/ zlib
cd ~/local/ssl/certs
ln -s /etc/pki/tls/certs/ca-bundle.crt ca-bundle.crt
ln -s /etc/pki/tls/certs/ca-bundle.trust.crt ca-bundle.trust.crt
ln -s /etc/pki/tls/certs/localhost.crt localhost.crt
--with-zlib-include
を間違えて-with-zlib-include
にしていてエラーになり質問したりしてた。恥ずかしい。
~/.bashrc
に
export PYTHONPATH='/home/232/2314090/local/lib/python2.6/site-packages:$PYTHONPATH'
と追記し、
mkdir -p ~/local/lib/python2.6/site-packages
source ~/.bashrc
easy_install --prefix=$HOME/local pip
とする。get-pip.py
はインストール先を使えないので使わない。
libev
cd /dev/shm
git clone https://github.com/JiapengLi/libev.git --depth=1
cd libev
./configure --prefix=/home/232/2314090/local/
make
make install
libevent
cd /dev/shm
git clone --depth=1 -b release-2.1.8-stable https://github.com/libevent/libevent.git
./autogen.sh
./configure --prefix=/home/232/2314090/local --disable-libevent-regress --disable-samples
make
make install
jansson
cd /dev/shm
git clone https://github.com/akheron/jansson.git
cd jansson/
git checkout -b build v2.10
cmake -DCMAKE_INSTALL_PREFIX=/home/232/2314090/local -DJANSSON_BUILD_DOCS=false
make
make install
-DJANSSON_BUILD_DOCS=false
をしないとsphinx
というpython製のドキュメント生成ツールを要求されます。pip
は上述の通り入れられるがpipを使ったインストールがどうもできない。
pip install --install-option="--prefix=$HOME/local" sphinx
pip install sphinx --user
は試したけどだめだった。
libunistring
cd /dev/shm
wget https://ftp.gnu.org/gnu/libunistring/libunistring-0.9.7.tar.xz
tar -xf libunistring-0.9.7.tar.xz
cd libunistring-0.9.7
./configure --prefix=/home/232/2314090/local
make
make install
gettext
cd /dev/shm
wget http://ftp.gnu.org/pub/gnu/gettext/gettext-0.19.8.1.tar.gz
tar -xf gettext-0.19.8.1.tar.gz
cd gettext-0.19.8.1
./configure --prefix=/home/232/2314090/local --libdir=/home/232/2314090/local/lib --libexecdir=/home/232/2314090/local/lib
make
make install
わりとビルドには時間がかかる。これの依存ライブラリのlibacl
はCentOS6にくっついてくるものでよさそうだ。
autoconf
なんとxzをビルドするのにまさかのautoconf
のビルドが必要だった。さもないと
error: Autoconf version 2.64 or higher is required
とか言われる。ちくせう。
cd /dev/shm
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.xz
tar -xf autoconf-2.69.tar.xz
cd autoconf-2.69
./configure --prefix=/home/232/2314090/local
make
make install
automake
なんとxzをビルドするのにまさかのautomake
のビルドも必要だった。さもないと
require Automake 1.12, but have 1.11.1
とか言われる。ちくせう。
cd /dev/shm
wget http://ftp.gnu.org/gnu/automake/automake-1.15.1.tar.xz
tar -xf automake-1.15.1.tar.xz
cd automake-1.15.1
./configure --prefix=/home/232/2314090/local
make
make install
xz
なんかこいつのためにえらいいろいろビルドさせられた感ある。
git clone https://git.tukaani.org/xz.git
cd xz
git checkout -b build v5.2.3
./autogen.sh
./configure --prefix=/home/232/2314090/local --disable-rpath --enable-werror
make
make install
libicu(失敗)
cd /dev/shm
wget http://download.icu-project.org/files/icu4c/59.1/icu4c-59_1-Fedora25-x64.tgz
tar -xf icu4c-59_1-Fedora25-x64.tgz
cd icu/usr
rsync -a local/ ~/local
これはビルドが面倒そうなので公式配布のfedora向けのbinaryを拝借しようとしたらglibcのバージョンが合わずに失敗した。仕方ないからビルドしようとするじゃん?std::nullptr_t
って何ですか?ってエラーが出るんですね、C++11に対応した環境じゃないとビルドできない。
C++11環境が必要になった
C++11がまともに使えないgccではclangをビルドできないので、gccでgccをビルドする。
cd /dev/shm
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-7.1.0/gcc-7.1.0.tar.bz2
tar -xf gcc-7.1.0.tar.bz2
cd gcc-7.1.0
mv ./contrib/download_prerequisites ./contrib/download_prerequisites_bk
sed -e "s/ftp/http/g" ./contrib/download_prerequisites_bk > ./contrib/download_prerequisites
chmod +x contrib/download_prerequisites
./contrib/download_prerequisites
cd /dev/shm
mkdir gcc_build
cd gcc_build/
../gcc-7.1.0/configure --prefix=$HOME/local --enable-languages=c,c++ --disable-multilib 2>&1 | tee ~/gcc710_configure.log
make -j2 2>&1 | tee ~/gcc710_build.log
なんと容量不足でコケる。libstdc++
のリンク作業で詰む。
WebDAVをマウントして速度を犠牲に容量不足を解消しようとした
幸い理科大のネットワーク回線は比較的高速なので、WebDAVをマウントしてそこでgccビルドすればワンちゃんあると思った。
理科大生なら今年からBoxが無料で無制限に利用できるから容量の心配はいらない。
serverfault.com
によればwdfsってのを使えばrootがなくてもマウントできるぽい。
WebDAV Client library。
wget http://www.webdav.org/neon/neon-0.30.2.tar.gz
tar -xf neon-0.30.2.tar.gz
cd neon-0.30.2
./configure --prefix=$HOME/local --with-expat --enable-shared --disable-static --with-ssl=openssl --with-ca-bundle=/etc/pki/tls/certs/ca-bundle.crt
make
make install
mountしちゃう系ソフト。わりとインストールが面倒くさい。configure
先生仕事してください。
wget https://github.com/libfuse/libfuse/releases/download/fuse-2.9.7/fuse-2.9.7.tar.gz
tar -xf fuse-2.9.7.tar.gz
cd fuse-2.9.7
./configure --prefix=/usr --libdir=/usr/lib --enable-lib --enable-util --disable-example
make
mkdir dest
make DESTDIR=/dev/shm/fuse-2.9.7/dest install
cd dest/
mv etc/udev usr/lib/
mv sbin/mount.fuse usr/bin/
rsync -a usr/ ~/local
本当は/etc
にfuse.conf
もおかないといけないんだけど、permissionがないので致し方なし。
で、pkgconfigがぶっ壊れているので
vim ~/local/lib/pkgconfig/fuse.pc
などして
prefix=/usr
exec_prefix=${prefix}
libdir=/usr/lib
includedir=${prefix}/include
となっているのを
prefix=/home/232/2314090/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
にすればよい。
wdfs
WebDAVをマウントするソフト。
wget http://noedler.de/projekte/wdfs/wdfs-1.4.2.tar.gz
tar -xf wdfs-1.4.2.tar.gz
cd wdfs-1.4.2
LDFLAGS='-lpthread' ./configure --prefix=$HOME/local
wget https://raw.githubusercontent.com/jmesmon/overlay/master/net-fs/wdfs/files/wdfs-1.4.2-fix-Waddress.patch
wget https://raw.githubusercontent.com/jmesmon/overlay/master/net-fs/wdfs/files/wdfs-1.4.2-user-agent.patch
patch -p1 -t -N < wdfs-1.4.2-fix-Waddress.patch
patch -p1 -t -N < wdfs-1.4.2-user-agent.patch
make
make install
github.com
のパッチを利用させてもらった。
ビルドは通ったがいざ使おうとすると
$wdfs https://dav.box.com/dav $HOME/mnt/box
username: 2314090@ed.tus.ac.jp
password:
fusermount: mount failed: Operation not permitted
権限がないと言われる。詰んだ。あーもーだめだ(AMD)。