yumetodoの旅とプログラミングとかの記録

旅や登山の記録やプログラミング関連の話とかフリーソフト紹介とか

東京理科大学のLinux環境に最新のgitを自前ビルドして導入しようとしたが挫折した話

はじめに

まじで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がビルドできると思っていた頃の記録

下準備(大学の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 subdirectoryn。そうしたら

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にしていてエラーになり質問したりしてた。恥ずかしい。

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をビルドできないので、gccgccをビルドする。

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がなくてもマウントできるぽい。

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

本当は/etcfuse.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)。

Cisco AnyConnect ClientをUbuntu 16.04に入れて使うには

東京理科大学VPNの利用にはCisco AnyConnect Clientの導入が必要だ。ところが大学のアナウンス通りではインストールできなかったのでメモしておく。

方法

以下

を参考にすすめる。

  1. https://tusuas1.tus.ac.jp/download/vpnからRed Hat Enterprise Linux 6.x (64bit), Ubuntu 12.04, 12.10 (64bit)を選んで、anyconnect-predeploy-linux-64-4.1.08005-k9.tar.gzをダウンロードする。もちろんバージョンは違うかもしれない。
  2. tar -xfなどで解凍する
sudo apt-get install network-manager-openconnect
cd ${2で解凍したdirectory}/vpn
sudo ./vpn_install.sh
sudo systemctl daemon-reload
sudo systemctl start vpnagentd.service 

daemon-reloadすればrebootする必要はない。

起動方法

Dashで「Cisco AnyConnect Secure Mobility Client」と検索するとGUIがある。実体は/opt/cisco/anyconnect/bin/vpnuiにある。ちなみにCUI版は/opt/cisco/anyconnect/bin/vpnにある。

あとは

VPN接続の開始、終了方法(Linux)

に従えばよし。

ノートPCのモニターが壊れた

my note pc was broken

2017/06/20のことだ。

その日は介護等体験の体験日通知なるイベントがあり、その前に必要書類を書くために大学でノートPCを起動していた。

14:40、そのイベントに参加するためにノートPCをスリープにした。極めて一般的に日常的な操作だ。

さて、そのイベントが終わり遅い昼食をとって再びノートPCを起動しようとした。16:30くらいだったろうか。

・・・いきなり冒頭の写真の状態だ。ワケガワカラナイヨ

とにかく作業中のデータをどうにかしたいがまずは休止状態にしてやる必要がある。友人の手を借りてどうにかコマンドプロンプトから休止状態にした。

家に帰って翌日、自宅のBDレコーダーとテレビをつないでいたHDMIケーブルを拝借してどうにか作業を保存し電源を切った。

これはつないでいた時の壊れたモニターの写真だ。


さて、修理をどうするか。メーカー保証なんてとっくに切れているし修理屋に見積もりを取るしかなさそうだ。