NixOSでroswell経由でQlotを使う方法

まとめ

Qlotを使用したいなら、roswellはこちらを参考に手動ビルドしたものを使うと良いです。

原因

NixOSでroswellを入れてqlot installをすると、謎のエラーとともに終了します。 これの理由としてNixで入るroswellとQlotが背景で行っている処理が関係します。

Nixで入るroswellについて

Nix経由で入れたroswellは一部の引数が正しく動作しないようです。その一つとして+Qフラグがあります。+Qフラグを用いるとquicklispなしで処理系が立ち上がるのですが、なぜかNixで入れたroswellだとそうなりません。

# quickloadがなぜか動く
ros run +Q -e '(ql:quickload :qlot)'

Qlotが背景ですることについて

qlot installを実行したときに最初の方で行う処理として、新しいプロジェクト用のquicklispのインストールがあります。 quicklispのインストールでは、インストールスクリプトをシェルコマンド経由で実行します。 このスクリプトは、+Qフラグを渡してroswellに渡してquicklispを除いた処理系の上で実行されます。 これは、quicklispのインストールスクリプトを実行したときに、すでに環境にquicklispが入っているとインストールを中断するためです。

結論

Qlotは処理中でquicklispをインストールします。 quicklispのインストールはすでに環境にquicklispが入っているとインストールが中断されるため、+Qフラグを渡したroswellで実行しています。 しかし、Nixで入ったroswellは+Qフラグを正しく処理しないために、quicklispのインストールが中断されるわけです。

上の原因により、Nix以外の方法でroswellは導入する必要があります。 幸いにroswellの公式がNixOS向けのインストール手順を公開しているのでそちらを利用しましょうインストール手順へのリンク