この記事は RICORA Advent Calendar 2022の7日目の記事です。
動機
- CTFで最近SageMathによるCryptoのWriteUpが増えている
- 約1年前にSageMath(Windowsバイナリ版)をダウンロードしていた
- 最近うまく動かない
- 再インストールしよう!
- SageMathのWindowsサポートが終了していた
- Virtualbox上のKali Linuxに再ダウンロードするか…
SageMath(sage)とは
"Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, and MATLAB"
Copyright (C) 2005-2022 The Sage Development Team
複雑な数学的計算をいろいろできるソフト。
問題
SageMathのリファレンス少なくないか?
インストール方法を探してもみんな公式のreadmeに飛ばしやがる。英語ザコ&gitサボってた私にはわからん…ということで、手探りでインストールを進めていく。
環境:Kali GNU/Linux 2022.04
実践
1.前提条件を整える。まず、最小の条件である、
- gcc,g++
- clang
- gfortran
- perl
- make
- m4
- ar
- ranlib
- tar
- python(3)
を含む、
sudo apt-get install bc binutils bzip2 ca-certificates cliquer cmake curl ecl eclib-tools fflas-ffpack flintqs g++ gcc gengetopt gfan gfortran glpk-utils gmp-ecm lcalc libatomic-ops-dev libboost-dev libbraiding-dev libbrial-dev libbrial-groebner-dev libbz2-dev libcdd-dev libcdd-tools libcliquer-dev libcurl4-openssl-dev libec-dev libecm-dev libffi-dev libflint-arb-dev libflint-dev libfplll-dev libfreetype6-dev libgc-dev libgd-dev libgf2x-dev libgiac-dev libgivaro-dev libglpk-dev libgmp-dev libgsl-dev libhomfly-dev libiml-dev liblfunction-dev liblinbox-dev liblrcalc-dev liblzma-dev libm4ri-dev libm4rie-dev libmpc-dev libmpfi-dev libmpfr-dev libncurses5-dev libntl-dev libopenblas-dev libpari-dev libpcre3-dev libplanarity-dev libppl-dev libprimesieve-dev libpython3-dev libqhull-dev libreadline-dev librw-dev libsingular4-dev libsqlite3-dev libssl-dev libsuitesparse-dev libsymmetrica2-dev libz-dev libzmq3-dev libzn-poly-dev m4 make nauty ninja-build openssl palp pari-doc pari-elldata pari-galdata pari-galpol pari-gp2c pari-seadata patch perl pkg-config planarity ppl-dev python3 python3-distutils python3-venv r-base-dev r-cran-lattice singular singular-doc sqlite3 sympow tachyon tar tox xcas xz-utils
を実行する。
また、開発用途で
sudo apt-get install autoconf automake git gpgconf libtool openssh openssh-client pkg-config
、さらにオマケとして
sudo apt-get install default-jdk dvipng ffmpeg imagemagick latexmk libavdevice-dev pandoc tex-gyre texlive-fonts-recommended texlive-lang-cyrillic texlive-lang-english texlive-lang-european texlive-lang-french texlive-lang-german texlive-lang-italian texlive-lang-japanese texlive-lang-polish texlive-lang-portuguese texlive-lang-spanish texlive-latex-extra texlive-xetex
を実行する。
2.sageをインストールするディレクトリで、
git clone https://github.com/sagemath/sage.git
。sageのコンパイル前のソースファイルがダウンロードされる。
3.実行ディレクトリ直下にディレクトリsage
ができるので、cd sage
して
make configure
4.3.の終了後、
./configure
を実行。その後
./config.status --recheck && ./config.status
5.recheckが終わったら、
make
を実行する。これで、ソースファイルから先ほどダウンロードしたg++等によるコンパイルが始まる。
注意!:コンパイル後のファイルは10GB弱ほどになります。容量もさることながら、何よりコンパイル時間がめっちゃ長いです(私の場合は5時間でした)。
6.sageディレクトリで
./sage
を実行し、
┌────────────────────────────────────────────────────────────────────┐
│ SageMath version 9.8.beta4, Release Date: 2022-11-21 │
│ Using Python 3.10.8. Type "help()" for help. │
└────────────────────────────────────────────────────────────────────┘
sage:
などとなったら目標達成。
終わりに
gitさえ知っていれば多分できるんだろうが、私は死にかけたので書き残すことにした。なお、.sage
を拡張子とするsageのプログラムファイルは./sage "example.sage"
という形で実行するのではなく、sageシェル内で
sage: load("example.sage")
という形で実行する。Sage チュートリアル(日本語版)等を参考に、ぜひSageMathを使いこなしてほしい。
あとはSageMathのVScode拡張さえあればなあ…