2013-02-18 67 views
5

我最近使用CentOS 6.3安裝了Go到我們的服務器。安裝似乎沒有問題。然而,我做了一個測試「hello world」腳本,當我運行時,我得到以下輸出。前叉/執行權限被拒絕錯誤

fork/exec /tmp/go-build967564990/command-line-arguments/_obj/a.out: permission denied 

現在運行去env或其他go命令似乎工作。起初我認爲這是一個權限問題,但是以root用戶身份運行我得到同樣的東西。一個

回答

10

只是猜測:您的nix可能因安全原因在/ tmp中執行程序而禁用。它可以在CentOS中配置,但我不知道。

替代解決方案:看來你正在嘗試go run來執行一個Go程序(這與C腳本一樣是一個腳本)。嘗試(假設$GOPATH=~,容易可能性),而不是一個正常的構建,即代替

me:~/src/foo$ go run main.go 

嘗試

me:~/src/foo$ go build # main.go should not be necessary here 
me:~/src/foo$ ./foo 

這種方法仍然會使用/ tmp,無論以形成二元,IIRC,但它將不會嘗試從那裏執行它。

PS:不要以root身份運行這些命令。沒有必要使用正確的設置。

+2

@ user387049,看起來像jnml是正確的:嘗試運行'mount'並查看'/ tmp'的輸出是否提到'noexec'選項。 – kostix 2013-02-18 20:38:47

+0

運行掛載確實顯示/ tmp有noexec選項。不想禁用它,建立並運行修復問題。謝謝! – user387049 2013-02-18 21:40:43

+0

我做了一個快速的Go腳本,它可以構建並在之後執行程序。我更喜歡減少兩個步驟到一個:) https://github.com/rjbishop/gobe – richoffrails 2013-10-04 20:41:01

-4

考慮嘗試:

sudo mount -o remount exec /tmp 
+0

反對損壞的鏈接 – codecraig 2014-10-29 13:29:56

8

我今天遇到了這個問題,但上述方案中並沒有工作。礦山固定只需運行:

$ export TMPDIR=~/tmp/ 

然後我就能夠拿到劇本與運行:

$ go run hello.go 
hello, world 

唯一的缺點是,你必須運行export TMPDIR要運行一個應用程序每次。

榮譽給Adam Goforth

+1

像一個魅力工作 – victorkurauchi 2015-03-03 14:04:40

+0

你不需要每次你想運行的時候出口..只要把如果你想避免影響其他程序,你可以在〜/ .profile或〜/ .bashrc – 2015-09-25 09:53:13

+0

上輸出,你可以'alias go ='TMPDIR =〜/ tmp go'' – kbolino 2017-10-04 20:18:12

0

fix this issue on my Chromebook我只是重新安裝~/tmp爲可執行文件。可能有這樣的安全隱患,但由於go run作品在其他平臺上我想,也許它不是那麼糟糕(尤其是本地開發機器上):

sudo mount -i -o remount,exec /tmp/ 

我將此添加到我的.bash_profile腳本。