YACASL2のインストール

Table of Contents


1 要件

YACASL2は、LinuxやMac OS Xなど、UNIX系のOS上で動作します。現在動作を確認しているのは、Arch LinuxとUbuntu Linux、Mac OS Xです。

インストール時に、tar gcc makeが必要です。Linuxでは多くの場合、標準でインストールされています。Mac OS Xの場合、Xcodeの「Command Line Tools」に含まれます。


2 インストールの手順


2.1 YACASL2ファイルのダウンロード

YACASL2のサイトから、tar.gzまたはtar.xzファイルと、対応する検証用ファイルをダウンロードします。githubのダウンロードページからtar.gzなどのファイルをダウンロードすることもできます。


2.2 YACASL2ファイルの検証

ダウンロードが完了したら、圧縮ファイルが改竄されていないか検証します。検証には、GnuPG分離署名か、MD5ハッシュ値を使います。

2.2.1 GnuPG分離署名での検証

GnuPGのgpgで圧縮ファイルを検証します。この検証を行うには、GnuPGがインストールされ、自分用の秘密鍵が作成されている必要があります。 また、あらかじめtar.gzまたはtar.xzファイルと、対応する検証用ファイルtar.gz.ascまたはtar.xz.ascファイルを同じディレクトリーに保存し、そのディレクトリーに移動しておきます。

次の手順ではgpg --verifyによる検証を2回実行させています。1回目では検証に失敗する一方で、必要な鍵などの情報を得ています。その鍵をgpg --recv-keysで取得し、gpg --lsign-keyでローカル署名した後、再度gpg --verifyによる検証を行い、成功させています。

$ ls yacasl2.tar.gz*
yacasl2.tar.gz  yacasl2.tar.gz.asc
$ gpg --verify yacasl2.tar.xz.asc
gpg: assuming signed data in 'yacasl2.tar.gz'
gpg: Signature made Tue 02 Jun 2026 01:14:17 AM JST
gpg:                using EDDSA key 77EC282A2F7317EBFF7BFD067F593ED86D88E1D5
gpg: Can't check signature: No public key
$ gpg --recv-keys 77EC282A2F7317EBFF7BFD067F593ED86D88E1D5
gpg: key 7F593ED86D88E1D5: public key "j8takagi <j8takagi@nifty.com>" imported
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: next trustdb check due at 2029-06-01
gpg: Total number processed: 1
gpg:               imported: 1
$ gpg --lsign-key 77EC282A2F7317EBFF7BFD067F593ED86D88E1D5

pub  ed25519/7F593ED86D88E1D5
     created: 2026-04-23  expires: 2031-04-30  usage: SC  
     trust: unknown       validity: unknown
sub  cv25519/B3433115DBD37726
     created: 2026-04-23  expires: never       usage: E   
[ unknown] (1). j8takagi <j8takagi@nifty.com>


pub  ed25519/7F593ED86D88E1D5
     created: 2026-04-23  expires: 2031-04-30  usage: SC  
     trust: unknown       validity: unknown
 Primary key fingerprint: 77EC 282A 2F73 17EB FF7B  FD06 7F59 3ED8 6D88 E1D5

     j8takagi <j8takagi@nifty.com>

This key is due to expire on 2031-04-30.
Are you sure that you want to sign this key with your
key "j8takagi <j8takagi@nifty.com>" (4223493EBCB683A9)

The signature will be marked as non-exportable.

Really sign? (y/N) y

$ gpg --verify yacasl2.tar.gz.asc
gpg: assuming signed data in 'yacasl2.tar.gz'
gpg: Signature made Tue 02 Jun 2026 01:14:17 AM JST
gpg:                using EDDSA key 77EC282A2F7317EBFF7BFD067F593ED86D88E1D5
gpg: checking the trustdb
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   1  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1  valid:   1  signed:   0  trust: 1-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2029-06-01
gpg: Good signature from "j8takagi <j8takagi@nifty.com>" [full]
gpg: Signature notation: manu=2,2.5+1.12,0,3

2.2.2 MD5ハッシュ値での検証

opensslで圧縮ファイルから生成したMD5ハッシュ値が、ダウンロードしたyacasl2.tar.gz.md5sumファイルの内容と同じかどうかdiffで検証します。

$ openssl md5 yacasl2.tar.gz | diff -s yacasl2.tar.gz.md5sum -
Files yacasl2.tar.gz.md5sum and - are identical

2.3 YACASL2ファイルの展開

YACASL2ファイルをダウンロードしたら、tarコマンドで展開します。

$ tar xvzf yacasl2.tar.gz

2.4 ビルド

展開したら、makeコマンドを実行してビルドします。 YACASL2のコマンド実行ファイルであるcasl2 comet2 dumpword casl2rev comet2monitorが生成されます。

$ cd yacasl2
$ make
make -C src
make[1]: Entering directory ‘/home/username/yacasl2/src’
gcc -c -g -Wall -I ../include casl2.c
gcc -c -g -Wall -I ../include word.c
gcc -c -g -Wall -I ../include hash.c
gcc -c -g -Wall -I ../include cerr.c
gcc -c -g -Wall -I ../include struct.c
gcc -c -g -Wall -I ../include cmd.c
gcc -c -g -Wall -I ../include assemble.c
gcc -c -g -Wall -I ../include token.c
gcc -c -g -Wall -I ../include label.c
gcc -c -g -Wall -I ../include macro.c
gcc -c -g -Wall -I ../include exec.c
gcc -c -g -Wall -I ../include dump.c
gcc -g -Wall -I ../include -o ../casl2 casl2.o word.o hash.o cerr.o st
ruct.o cmd.o assemble.o token.o label.o macro.o exec.o dump.o
gcc -c -g -Wall -I ../include comet2.c
gcc -g -Wall -I ../include -o ../comet2 comet2.o word.o hash.o cerr.o
struct.o cmd.o exec.o dump.o
gcc -c -g -Wall -I ../include dumpword.c
gcc -g -Wall -I ../include -o ../dumpword dumpword.o word.o cerr.o
make[1]: Leaving directory ‘/home/username/yacasl2/src’

2.5 casl2の実行テスト

ビルドしたら、次のコマンドが正常に実行できるかを確認します。 正常に実行された場合は、「Hello, World!」と表示されます。

$ ./casl2 as/hello.casl
Hello, World!

2.6 詳細なテスト

make checkコマンドを実行すると、正常にビルドできているかどうかを詳細にテストできます。 テストには、しばらく時間がかかります。

$ make check
195 / 195 tests passed. Details in /home/username/yacasl2/test/integra
tion/casl2/Test.log
All tests are succeeded.
149 / 149 tests passed. Details in /home/username/yacasl2/test/integra
tion/comet2/Test.log
All tests are succeeded.
4 / 4 tests passed. Details in /home/username/yacasl2/test/integration
/dumpword/Test.log
All tests are succeeded.

2.7 インストール

YACASL2のコマンド実行ファイルはビルド後、make installコマンドでインストールできます。インストール先は初期設定では、~/binディレクトリーです。

$ make install

インストール先を変更するには、prefixなどのオプションを指定します。 例えば/usr/localディレクトリーにインストールするには、次のようにコマンドを実行します。

$ sudo make install prefix=/usr/local

オプションの詳細は次のとおりです。

オプション説明初期設定
prefixインストール時のルートファイル~
bindir実行ファイルのインストール先$prefix/bin
infodirinfoファイルのインストール先$prefix/share/info

2.8 環境変数の設定

環境変数PATHINFOPATHを設定することで、YACASL2が使いやすくなります。

2.8.1 PATHの設定

PATHにYACASL2の実行ファイルのインストール先が含まれている場合は、ディレクトリーの指定を省略してcasl2などの実行ファイル名を指定できます。PATHは、次のコマンドで確認できます。

$ echo $PATH

YACASL2のインストール先の初期設定である~/binディレクトリーは、OSインストール時にPATHに含まれている場合もあります。含まれていない場合は、次のコマンドでPATHに追加できます。

$ PATH=$HOME/bin:$PATH; export PATH

~/.profile~/.bashrcなどの初期化ファイルにPATHへの追加を設定しておけば、YACASL2のコマンド実行時に常にディレクトリーの指定を省略できます。 次は、PATH~/binが二重に追加されることを防ぐ書き方です。

case ":${PATH}:" in
    *":${HOME}/bin:"*) ;;
    *) export PATH="${HOME}/bin:${PATH}" ;;
esac

2.8.2 INFOPATHの設定

環境変数INFOPATHとInfoが適切に設定されていれば、次のコマンドでYACASL2のInfoを表示できます。

$ info yacasl2

INFOPATHにYACASL2のInfoファイルをインストールしたディレクトリーの追加は、次のコマンドでできます。なお、YACASL2のInfoファイルインストール先の初期設定は、~/share/infoです。

$ INFOPATH=$HOME/share/info:$INFOPATH; export INFOPATH

~/.profile~/.bashrcなどの初期化ファイルにINFOPATHへの追加を設定しておけば、常にYACASL2のInfoを表示できます。 次は、INFOPATH~/share/infoが二重に追加されることを防ぐ書き方です。

case ":${INFOPATH}:" in
    *":${HOME}/share/info:"*) ;;
    *) export INFOPATH="${HOME}/share/info:${INFOPATH}" ;;
esac