2023/04/24

gentooへのdmdのインストール

dev-lang/dmdのインストールでハマったのでメモ。

2023/4/24日現在の最新のdev-lang/dmd-2.099.1をインストールしようとすると、dmd自身のコンパイルに、dmdが必要という再帰的な要求が。。。。


結論としては、手に入る最も古いバージョンのdmdをインストールして、徐々にアップグレードをしていくと、最新版までインストールできた。

途中、インストールに失敗するバージョンもあったので、諦めずにインストールできるバージョンをインストールしていく。

# emerge =dev-lang/dmd-2.064.2-r7
# emerge =dev-lang/dmd-2.067.1-r8
# emerge =dev-lang/dmd-2.080.1-r3
# emerge =dev-lang/dmd-2.090.1
# emerge =dev-lang/dmd-2.098.1
# emerge =dev-lang/dmd-2.099.1
# emerge -u dev-lang/dmd

dmd-2.068.2-r9 や emerge =dev-lang/dmd-2.069.2-r6 はインストールに失敗した。

また、2.064.2-r7を入れてすぐに最新の2.099.1にアップデートしようとしたら、これまた失敗した。

dmd-2.068.2-r9 や emerge =dev-lang/dmd-2.069.2-r6 はインストールに失敗した。


手順

そもそも、gentooの公式リポジトリにdmdは登録されていないので、dlangというoverlayを読み込む。今回は、以前使用したlaymanコマンドを使った。-aオプションは登録。削除は-dオプション。

# layman -a dlang

 * Adding overlay...
 * Overlay "dlang" is not official. Continue installing? [y/n]: y
 * Running Git... # ( cd /var/lib/layman  && /usr/bin/git clone https://github.com/gentoo/dlang.git /var/lib/layman/dlang )
Cloning into '/var/lib/layman/dlang'...
remote: Enumerating objects: 5285, done.
remote: Counting objects: 100% (514/514), done.
remote: Compressing objects: 100% (212/212), done.
remote: Total 5285 (delta 288), reused 501 (delta 280), pack-reused 4771
Receiving objects: 100% (5285/5285), 1.14 MiB | 6.39 MiB/s, done.
Resolving deltas: 100% (3108/3108), done.
 * Running Git... # ( cd /var/lib/layman/dlang  && /usr/bin/git config user.name "layman" )
 * Running Git... # ( cd /var/lib/layman/dlang  && /usr/bin/git config user.email "layman@localhost" )
 * Successfully added overlay(s) dlang.


なお、laymanの代わりにeselect-repositoryを使うこともできるようになっていた。

# emerge -uDNtpv app-eselect/eselect-repository

These are the packages that would be merged, in reverse order:

Calculating dependencies... done!
Dependency resolution took 5.66 s.

[ebuild  N     ] app-eselect/eselect-repository-13::gentoo  USE="-test" PYTHON_SINGLE_TARGET="python3_10 -python3_9 -python3_11" 9 KiB
[ebuild  N     ]  dev-python/lxml-4.9.2::gentoo  USE="threads -doc -examples -test" PYTHON_TARGETS="python3_10 (-pypy3) -python3_9 -python3_11" 935 KiB

Total: 2 packages (2 new), Size of downloads: 944 KiB

# emerge -uDN app-eselect/eselect-repository

# eselect repository list -i
Available repositories:
  [90]  dlang @
  [135] gentoo # (https://gentoo.org/)


laymanで入れているのですでにdlangが含まれていたが、laymanを使っていなければ、下記で"dlang" overlayを追加できる


# eselect repository enable dlang
# emerge --sync dlang


ここからがハマったところ。

dev-lang/dmd-2.099.1:2.099のemerge時に、dmdコマンドが無いというエラー(下記)が出て先に進まない。


 * Package:    dev-lang/dmd-2.099.1:2.099
 * Repository: dlang
 * USE:        abi_x86_64 amd64 elibc_glibc kernel_linux selfhost userland_GNU
 * FEATURES:   network-sandbox preserve-libs sandbox selinux sesandbox userpriv usersandbox
>>> Unpacking source...
>>> Unpacking dmd.2.099.1.linux.tar.xz to /data2/var/tmp/portage/dev-lang/dmd-2.099.1/work
>>> Source unpacked in /data2/var/tmp/portage/dev-lang/dmd-2.099.1/work
>>> Preparing source in /data2/var/tmp/portage/dev-lang/dmd-2.099.1/work/dmd2 ...
 * Applying 2.097-link-32-bit-shared-lib-with-ld.bfd.patch ...
 [ ok ]
>>> Source prepared.
>>> Configuring source in /data2/var/tmp/portage/dev-lang/dmd-2.099.1/work/dmd2 ...
>>> Source configured.
>>> Compiling source in /data2/var/tmp/portage/dev-lang/dmd-2.099.1/work/dmd2 ...
 * Building dmd build script...
dmd dmd/src/build.d -L-O1 -L--as-needed -ofdmd/generated/build
/data2/var/tmp/portage/dev-lang/dmd-2.099.1/temp/environment: line 1273: dmd: command not found
 * ERROR: dev-lang/dmd-2.099.1::dlang failed (compile phase):
 *   (no error message)
 *
 * Call stack:
 *     ebuild.sh, line  136:  Called src_compile
 *   environment, line 3654:  Called dmd_src_compile
 *   environment, line 1445:  Called dlang_compile_bin 'dmd/generated/build' 'dmd/src/build.d'
 *   environment, line 1186:  Called dlang_exec 'dmd' 'dmd/src/build.d' '-L-O1' '-L--as-needed' '-ofdmd/generated/build'
 *   environment, line 1273:  Called die
 * The specific snippet of code:
 *       ${@} || die
 *
 * If you need support, post the output of `emerge --info '=dev-lang/dmd-2.099.1::dlang'`,
 * the complete build log and the output of `emerge -pqv '=dev-lang/dmd-2.099.1::dlang'`.
 * The complete build log is located at '/data2/var/tmp/portage/dev-lang/dmd-2.099.1/temp/build.log'.
 * The ebuild environment file is located at '/data2/var/tmp/portage/dev-lang/dmd-2.099.1/temp/environment'.
 * Working directory: '/data2/var/tmp/portage/dev-lang/dmd-2.099.1/work/dmd2'
 * S: '/data2/var/tmp/portage/dev-lang/dmd-2.099.1/work/dmd2'


gccもD言語のコンパイラを用意できるようなので、 

# USE="d" emerge -uDN =sys-devel/gcc-12.2.1_p20230304 を行い(gcc-12ではなく、gcc-11がインストールされた。おまけにgcc-12はコンパイルでコケた。)、改めてdmdのインストールをしてみたが、同じエラー

dmdの公式サイトから、直接インストールをしてみたりといろいろやったが、最終的には、前述のように、手に入る最も古いバージョンをインストールして、徐々にアップグレードすることで対応できた。



 

 

 

0 件のコメント:

コメントを投稿