【发布时间】:2020-08-27 03:56:52
【问题描述】:
我正在尝试打包脚本以在 Nix 派生中使用 git push 执行部署。
目标是在 post-receive 上运行一些操作的 git 存储库。
我想打包它,这样我就可以将它与我的配置一起保存并轻松发布,从而最大限度地减少手动任务的数量。
我已经设置了一个 git 用户:
users.users.git = {
isNormalUser = true;
shell = "/run/current-system/sw/bin/git-shell";
home = "/home/git";
openssh.authorizedKeys.keys = [
...
];
};
我的推导如下:
with import <nixpkgs> {};
let setupGitRepo = name : (
stdenv.mkDerivation {
name = "setup-git-repo";
dontUnpack = true;
buildInputs = [
git
];
buildPhase = ''
git init --bare ${name}.git
mkdir -p ${name}.git/hooks
touch ${name}.git/hooks/post-receive
tee ${name}.git/hooks/post-receive <<EOF
GIT="/home/git/${name}.git"
WWW="/var/www/${name}"
TMP="/tmp/${name}"
ENV="/home/git/${name}.env"
rm -rf \$TMP
mkdir -p \$TMP
git --work-tree=\$TMP --git-dir=\$GIT checkout -f
cp -a \$ENV/.* \$TMP
cd \$TMP
# install deps, etc
rm -rf \$WWW/*
mv \$TMP/* \$WWW/*
# restart services here
rm -rf \$TMP
EOF
'';
installPhase = ''
mkdir -p $out/var/www/${name}
mkdir -p $out/home/git
mkdir -p $out/home/git/${name}.env
chown -R git:users ${name}.git # doesn't work
chown -R git:users $out/var/www/${name} # doesn't work
cp -R ${name}.git $out/home/git
'';
});
in setupGitRepo "test"
我的问题是我无法在构建或安装阶段使用chown git:users 来设置所有权,我假设是因为构建过程中的隔离。
有没有办法克服这个问题?
我想知道我遇到的问题是否是我遗漏了一些明显的东西或滥用工具的信号。
从包中写入 /home 可能是另一种代码味道:我这样做是为了有一个更好的 url 添加到 git git remote add server git@mydomain:test.git)
谢谢
编辑:我将在这里上传我的 nixos 配置以及 David 的建议:https://github.com/framp/nixos-configs/blob/master/painpoint
【问题讨论】:
-
有点题外话:记住,shell 必须添加到
environment.shells。