【发布时间】:2020-05-12 14:42:49
【问题描述】:
我想在运行nix-shell 时自动将 CA 证书添加到 Java 密钥库。在以下脚本生效之前:
with import <nixpkgs> {
config.allowUnfree = true;
config.oraclejdk.accept_license = true;
};
let dependencies = rec {
_oraclejdk8 = stdenv.lib.overrideDerivation pkgs.oraclejdk8 (attrs : {
installPhase = ''
${attrs.installPhase}
pems_dir=pems
mkdir "$pems_dir"
echo "split bundled ca-certificates into separate files 'cert.N.pem'\
and add them to default keystore"
keytool=$out/bin/keytool
keystore=$jrePath/lib/security/cacerts
pushd "$pems_dir"
awk 'BEGIN {c=0;doPrint=0;} /END CERT/ {print > "cert." c ".pem";doPrint=0;} /BEGIN CERT/{c++;doPrint=1;} { if(doPrint == 1) {print > "cert." c ".pem"} }' < /etc/ssl/certs/ca-bundle.crt
# import certificates
for f in `ls cert.*.pem`; do
alias=`basename $f`
$keytool -import -trustcacerts -noprompt -keystore "$keystore" -alias "$alias" -file "$f" -storepass changeit;
done
popd
'';
});
};
in with dependencies;
stdenv.mkDerivation rec {
name = "env";
buildInputs = [ _oraclejdk8 ];
}
但现在它失败并出现以下错误:
/nix/store/9fx2jfmks2zhvv2kmqgl6rg0fbkc3da0-stdenv-linux/setup: line 1391: /etc/ssl/certs/ca-bundle.crt: No such file or directory
现在似乎无法访问任何现有文件。但实际上这个文件只是一个存储链接:
$ readlink -f /etc/ssl/certs/ca-bundle.crt
/nix/store/w3vw4q9z7s0wig6ng4nv62af1917ynrm-ca-certificates.crt
如何在我的脚本中访问此文件?
【问题讨论】:
标签: nix