2016-02-15 54 views
0

我想推廣並製作一個shell腳本出這個頁面上的說明,特別是在這裏:https://nixos.org/wiki/How_to_add_files_to_the_nix-store#Large_files,因爲Nix沒有處理4.5 GB的文件,我得到了內存不足的錯誤。使用unshare並仍然執行原始功能

因此...

我當前的代碼是:

#!/usr/bin/env bash 

function do_store { 
    if [ "$#" -lt 1 ]; then 
     printf "Must provide the Xcode_dmg\n" 
     exit 1 
    fi 
    unshare -m bash 

    local 
    sdk="$1" 
    name="$(basename $sdk)" 
    # Hack since the openssl sha and nix-store is super slow 
    hash="a08d555c4f3fd905c53ee67720d9e6ade01e1b0b" 
    store_path="$(nix-store --print-fixed-path sha1 $hash $name)" 
    mount -o remount,rw /nix/store 
    printf "$storepath\n\n0\n" | nix-store --register-validity --reregister 
    exit 
    # printf "name: %s, hash: %s, store_path: %s\n" "$name" "$hash" "$store_path" 
} 

do_store "[email protected]" 

...的想法,它將與sudo -HE

被調用,問題是unshare立即開始新的bash shell和「父」代碼停止運行,這對我來說當然是不好的,因爲我需要這個邏輯來完成。此外,我需要保留當前用戶的環境,因爲我需要nix-store等路徑仍然有效,因此使用sudo -HE

回答

0

嘗試用簡單:

unshare -fm 

,它派生新的子(這樣家長可以繼續執行),並沒有指定新的bash,它繼承環境變量。