はじめに
まじでCentOS6、ひいてはRedHatに殺意を覚える内容となっている。大体2009年とかでバージョンが止まってるものが多すぎる。今2017年だぞ?8年前とかもはや旧石器時代だ。
以下のビルド手順はArch Linux RepositoryおよびArch User RepositoryのPKGBUILDに大いにお世話になっている。これなしでは挫折したであろうこと疑いない。
なぜgitのビルドが必要か
実は理科大は今年Linux環境がCentOS5からCentOS6になった。なんでCentOS7じゃないんだよという話は
でしたので割愛して、その影響で今年から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がビルドできると思っていた頃の記録
下準備(大学のPCのWindows上)
どういうわけか~/.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 セグメンテーション違反です (コアダンプ)
とか怒られる。
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
にしていてエラーになり質問したりしてた。恥ずかしい。
pip(python)
~/.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環境が必要になった
gcc
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が無料で無制限に利用できるから容量の心配はいらない。
によればwdfsってのを使えばrootがなくてもマウントできるぽい。
neon
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
fuse
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
のパッチを利用させてもらった。
ビルドは通ったがいざ使おうとすると
$wdfs https://dav.box.com/dav $HOME/mnt/box username: 2314090@ed.tus.ac.jp password: fusermount: mount failed: Operation not permitted
権限がないと言われる。詰んだ。あーもーだめだ(AMD)。