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

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

dockerで遊んでたらPCのDisk残量がどっかーんとしまったのでパーテションを分けた話

母親氏、異変に気がつく

母「なんかPCログインできんのやけど?」

そのとき私は猛烈にトイレに行きたかった。とりあえず投げやりに

私「じゃあ再起動して」

これで解決するかに思われたが、トイレの中にまでヘルプを求める声が。

母「再起動したらログイン画面すらでなない」

ようやくトイレを出てPCを見るとその瞬間なぜかログイン画面にはたどり着いた。

原因をたどる

ログインして起動するとこんな通知が。

notification

Diskがあいてない・・・?

我が家では

/
/home
/boot/efi
swap

のようにパーテションを切っていて、この内/が残り50.8MBくらいしかなかった。

Diskを専有しているのは誰だ?

おもむろに

sudo du --exclude=home / | tee log.txt

して眺めていると/var/lib/docker/に差し掛かった。

・・・docker?

docker、心当たりがある!

github.com

つい昨日これのCIを組み立てるためのdocker imageを作るためにいろいろ試行錯誤していた。これのせいか!

du --summarize -h /var/lib/docker/

すると23GBと表示された。

パーテション分け

眺めていると/homeには空きがまだある。このパーテションを削ってあげれば/var/lib/docker/を割り当てられる気がする。

GParted

PCを終了し、手元にあったUbuntu 18.04のLive USBで起動する。

コマンドラインでパーテション操作とか余裕で無理ゲーなのでおとなしくGPartedを使う。

流石に100GBも割り当てれば足りるだろう。というわけで/dev/sdb1を100GB削って、新しく/dev/sdb3を作った。

GParted

結局40分くらいこの作業にかかった気がする。

copy

まずは移動元と移動先のパーテションをマウントしないといけない。

面倒臭がってキーボードの設定をしないで作業したので_とか打てない、つらい。

$ cd /mnt
$ sudo mkdir croot
$ sudo mount /dev/sdb1 /mnt/croot/
$ sudo mkdir ndocker
$ sudo mount /dev/sdb3 /mnt/ndocker/

さて、copyだ。コマンドはおなじみcpを使うとして、属性とかをそのまま引き継いでほしい。それには-aが必要だ。あと進捗が見たいので-vもつける。

ここでちょっとミスをしてしまう。

$ sudo cp -av /mnt/croot/var/lib/docker/ /mnt/ndocker/

するとndockerの中にdockerがコピーされてしまった。本当は

$ sudo cp -av /mnt/croot/var/lib/docker/* /mnt/ndocker/

としたかったのに、「そんなファイル名ないしDirectory名知らねー」と怒られてしまうから仕方なくこうした。なんでだったんだろうか。

とにかく仕方ないのでmvする。mvは属性とかはいじらない(読み取り権限ないと実行できないけど)

$ sudo ls -a /mnt/ndocker/ | xargs -I% sudo mv /mnt/ndocker/docker/% /mnt/ndocker/

これも*での展開がうまく行かずxargsを使ってる。とことんワイルドカードに嫌われている。なんでや?

リネーム

移送元も消さずにリネームして残しておく。

$ sudo mv /mnt/croot/var/lib/docker /mnt/croot/var/lib/docker_bk
fstab

wiki.archlinux.jp

これを眺めつつ設定する。UUIDはblkidコマンドをわざわざ叩かなくてもGPartedでも見れる。

#
# /var/lib/docker was moved to /dev/sdb3: 20190911
UUID=3a1ca756-0a42-4c33-9af0-83fd82ff76a8 /var/lib/docker ext4    defaults      0      2
シャットダウン

PCを終了してLive USBを抜く。

起動

起動しますようにと祈りつつ起動。

起動した。

dockerが普通に使えるか検証し動いたのでバックアップで残してた移送元を消して作業完了。

$ sudo rm -r /var/lib/docker_bk

その後

作業後20分もしないうちに国分寺市は猛烈な雷と雨に襲われた。

年に一度あるかないかくらいの雷だったのでPCとかTVのコンセントを抜いた数分後、瞬間的な停電に見舞われた。どっかーんという大きな雷が落ちる音がした。dockerがどっかーん(言いたかっただけ

https://twitter.com/tweet_egoiste/status/1171700198726193152?s=20

作業中に停電したら・・・

危ない。あぶない。

python 3.6.9をもっとガチでWindows10でx64 Release buildした

yumetodo.hateblo.jp

これはちょっと本気度が足りなかった。ほんとにビルドしただけで標準ライブラリ動かんし。インストーラーまで生成してこそやろ!

というか主目的のCodeLLDBの動作には至らなかったというだけなんですけどね、はい。

ビルドの準備

改めてビルドの準備をしていく。

.NET 3.5

Windows10では.NET 3.5がデフォルトで無効になっている。

blogs.technet.microsoft.com

に従って有効化する。

Visual Studio

2015以上であればよい。私はVisual Studio 2019を選んだ。C#C++コンパイルが普通にできれば十分だとは思うが、なんせ私の環境にはいろいろ入れているので最小構成がよくわからない。

MSVC v140 - VS2015 C++ ビルドツールとかも必要である可能性はある。

まあなんなら下にVS installerの構成ファイル置いておくので適宜いじって読み込ませてほしい。

gist.github.com

choclatey

必須というわけではないが、ないと説明が面倒くさいので。

chocolatey.org

にあるとおりに入れてほしい。

Mercurial

管理者権限のあるPowershellないしコマンドプロンプト

choco install hg -y
Python

PythonをビルドするにはPythonが必要である。おおっと、鶏と卵の問題というかブートストラップ問題だ。

choco install python3 -y
sphinx

さっそくPythonについてくるpipの出番だ。

pip install Sphinx
Tcl

これがなんなのかわかっていないがとにかく必要らしい。なんとなくIDLEのためじゃないかという気がするが・・・。

ftp://ftp.tcl.tk/pub/tcl/tcl8_6/

からtcl-core8.6.6-src.tar.gzをダウンロードする。

HTML Help Workshop

Visual Studio 2017以降のインストーラーでは入れられないので自分で持ってくる必要がある。Download Htmlhelp.exeをクリック。

docs.microsoft.com

ダウンロードしたら実行してどんどん次に進んでいけば終わる。

Build

Download & 展開

www.python.org

XZ compressed source tarballを落として展開する。

追加のファイル配置

その中にexternalsというディレクトリを作る。そこにtcl-core8.6.6-src.tar.gzを展開する。フォルダー名はtcl-core-8.6.6.0に。これをやらないと、下のTootのようなエラーに見舞われる。

環境変数の設定

VSの開発者コマンドプロンプトを立ち上げる。以下の環境変数を設定する。

rem python2.7もしくは3.4以降の`python.exe`のフルパス。
rem 今回はchocolateyで入れているから`"C:\Python37\python.exe"`
set PYTHON="C:\Python37\python.exe"
rem where sphinx-buildすれば教えてくれるだろう。
set SPHINXBUILD="C:\Python37\Scripts\sphinx-build.exe"
rem 1つ目はhg.exeの場所。where hgすれば教えてくれるだろう
rem もう一つはhhc.exeの場所。デフォルトでは"C:\Program Files (x86)\HTML Help Workshop\hhc.exe"
set PATH="C:\Program Files\Mercurial\hg.exe";"C:\Program Files (x86)\HTML Help Workshop\hhc.exe";%PATH%
ビルド

ビルドにはとても時間がかかる。PCを放置して別の作業をしたいが、PGOビルドをするときにネットワーク接続をしようとしてWindowsファイアウォールから許諾画面が出てくる。ただまあビルドの最終盤で気がついて許可したけど多分間に合ってなかったろうし、やっぱり放置してもいい気がする。

ビルドコマンドは極めてシンプルだ。-oにはビルド成果物を置く場所を指定する。

cd Tools\msi
buildrelease.bat -x64 -o "C:\tmp\python"

最終的に

               Total    Copied   Skipped  Mismatch    FAILED    Extras
    Dirs :         1         0         1         0         0         0
   Files :        71        28        43         0         0         0
   Bytes :   96.69 m   49.61 m   47.08 m         0         0         0
   Times :   0:00:00   0:00:00                       0:00:00   0:00:00


   Speed :           481735111 Bytes/sec.
   Speed :           27565.104 MegaBytes/min.
   Ended : 2019年8月27日 17:26:31

のようなログが出て終わった。

install

先程-oで指定したディレクトリにamd64というディレクトリが作られているはずだ。python-3.6.9-amd64.exeがよくお見かけするpythonインストーラーだ。

これを実行する。

python 3.6.9をWindowsでx64 Release buildした

ちょっとVSCodeのCodeLLDBというRustのデバッグに必要なやつのpythonのパス探索にブチ切れている。

github.com

しかしキレてばっかりでは状況が改善しない。どうあがいてもpython3.6が必要なのだ。

www.python.org

を見る限り、3.6系統の最新のリリースは3.6.9だ。しかしどういうわけかpre-build binaryが配布されいない。

仕方ない、ソースコードからビルドを試みるか。

www.python.org

XZ compressed source tarballを落として展開するとPCbuildというディレクトリがある。この中のreadme.txtにまあ大体書いてあるが、手順を書き残しておく。

まずVisual Studioが必要だ。VS2015が指定されているが、VS2017以降ではVS2015のC++コンパイラも入れられるようになっている。これはすでに入れてあった。結局必要だったかは知らない。

VSの開発者コマンドプロンプトを立ち上げる。先程展開したディレクトリに移動して

build.bat -p x64 -c Release

とするとビルドが始まる。

まあなんかエラーが出ているが、とにかくビルドが一旦完了する。amd64というディレクトリが作られており、その中に成果物が入っている。

しかしpython.exeがない。先のreadmeを読むとどのプロジェクトをビルドするべきかはわかる。

The following sub-projects represent the bare minimum required to build
a functioning CPython interpreter.  If nothing else builds but these,
you'll have a very limited but usable python.exe:
pythoncore
    .dll and .lib
python
    .exe

というわけでpcbuild.slnVisual Studioに読ませて立ち上げる。プロジェクトのアップグレードとか言われるが無視する。

Releasex64にした後ソリューションエクスプローラーからpythonを探して右クリックし、ビルドを押す。

select

完了した。

pythonと格闘したときと違って、いろいろ改善しているらしいし、

ymotongpoo.hatenablog.com

今ならこのときdebug版挫折したけど行けるのかな・・・

yumetodo.hateblo.jp