以下是我打包構建過程中遇到的檔案沒許可權或被佔用或 Mutex 失敗等資訊
使用 GitLab Runner 拉取專案時,遇到的報錯資訊如下
Running with gitlab-runner 13.11.0~beta.6.gc6e248a6 (c6e248a6)
Preparing the "shell" executor
Running on 98c4e471e0d5...
Getting source from Git repository
bash: line 27: /root/build/builds/glrt-9d1/0/t/app/dev/win/LindexiApps.tmp/CI_SERVER_TLS_CA_FILE: Permission denied
Cleaning up file based variables
rm: cannot remove '/root/build/builds/glrt-9d1/0/t/app/dev/win/LindexiApps.tmp/CI_SERVER_TLS_CA_FILE': Permission denied
ERROR: Job failed: exit status 1
或者是如下報錯資訊
warning: unable to unlink '/root/build/builds/glrt-9d1/0/t/app/dev/win/LindexiApps.tmp/git-template/config.lock': Permission denied
error: could not write config file /root/build/builds/glrt-9d1/0/t/app/dev/win/LindexiApps.tmp/git-template/config: Permission denied
Cleaning up file based variables
rm: cannot remove '/root/build/builds/glrt-9d1/0/t/app/dev/win/LindexiApps.tmp/CI_SERVER_TLS_CA_FILE': Permission denied
使用 dotnet 構建 Avalonia 過程遇到的問題:
Avalonia error AVLN9999: Access to the path '/root/build/builds/glrt-9d1/0/t/app/dev/win/LindexiApps/artifacts/obj/LindexiApps/release/LindexiApps.dll' is denied.
或者是構建過程中碰到 Mutex 鎖需要寫入 /tmp/.dotnet/shm
都會失敗
或者是一些更加看不懂的失敗
MSBuild version 17.8.5+b5265ef37 for .NET
Determining projects to restore...
dotnet: pthread_mutex_lock.c:81: __pthread_mutex_lock: Assertion `mutex->__data.__owner == 0' failed.
bash: line 121: 251 Aborted
感謝 lsj 幫忙找到是麒麟教育版安全中心在進行攔截。如下圖所示,可以看到很多檔案路徑都被攔截了
其中寫入到 /tmp/.dotnet/shm
路徑的,大部分都是和 Mutex 有關
這個攔截不僅攔截 dotnet 系的應用,也攔截 GitLab Runner 應用
按照 lsj 給的教程,這裡遇到的是 kid protect : disable_privacy
攔截。透過上圖的 KYSEC_KID 型別即可瞭解到。這裡的 KYSEC 是麒麟系統安全機制,詳細請參閱 kylinos-kysec介紹 - gpysir - 部落格園
在物理機終端輸入 $ sudo getstatus
即可看到如下輸出內容
$ sudo getstatus
KySec status: enabled
exec control : warning
net control : off
file protect : off
kmod protect : off
three admin : off
process protect: off
device control: off
ipt control : off
kid protect : disable_privacy
program blklist: off
eperm control: off
如上面輸出內容 KySec status: enabled
可以看到是開啟狀態。且透過 kid protect : disable_privacy
可以看到開啟了 kid protect 功能,也就是 KYSEC_KID 型別
嘗試單獨關閉 kid 功能,如下面命令
$ sudo setstatus -f kid off
禁用之後輸入 $ sudo getstatus
即可看到如下輸出內容
$ sudo setstatus -f kid off
$ sudo getstatus
KySec status: enabled
exec control : warning
net control : off
file protect : off
kmod protect : off
three admin : off
process protect: off
device control: off
ipt control : off
kid protect : off
program blklist: off
eperm control: off
如此可以看到沒有完全關閉麒麟系統安全機制,只是關閉了 kid protect 功能
詳細請參閱 銀河麒麟系統安全機制-KYSEC - 多弗朗強哥 - 部落格園
重新嘗試構建,此時所有的構建都符合預期。無論是 dotnet 還是 GitLab Runner 都能跑起來
這個問題坑了我一天多的時間,太感謝 lsj 的幫助了
吐槽點是這裡的攔截沒有什麼介面可以看到關閉選項,攔截的過程中也沒有給出通知,遇到這些問題我猜不到是被攔截
以下是我拿到的龍芯麒麟教育版系統的資訊
$ uname -a
Linux lindexi-pc 5.4.18-116-generic #105-KYLINOS SMP Fri Jun 21 14:09:22 UTC 2024 loongarch64 loongarch64 loongarch64 GNU/Linux
$ cat /etc/os-release
NAME="Kylin"
VERSION="銀河麒麟桌面作業系統(教育版)V10"
VERSION_US="Kylin Linux Desktop EDU V10"
ID=kylin
ID_LIKE=debian
PRETTY_NAME="Kylin V10 SP1"
VERSION_ID="v10"
HOME_URL="http://www.kylinos.cn/"
SUPPORT_URL="http://www.kylinos.cn/support/technology.html"
BUG_REPORT_URL="http://www.kylinos.cn/"
PRIVACY_POLICY_URL="http://www.kylinos.cn"
VERSION_CODENAME=kylin
UBUNTU_CODENAME=kylin
PROJECT_CODENAME=V10SP1-General-Edu
KYLIN_RELEASE_ID="2403"
$ cat /etc/debian_version
bullseye/sid
$ cat /etc/kylin-version/kylin-system-version.conf
[SYSTEM]
os_version = 2403
update_version = 2403
quality_version =
$ cat /etc/.kyinfo
[dist]
name=Kylin-Desktop-EDU
milestone=V10
arch=loongarch64
beta=False
time=2024-09-14 12:27:59
dist_id=Kylin-Desktop-V10-SP1-2403-update1-EDU-Release-20240914-LoongArch64-2024-09-14 12:27:59
[servicekey]
key=0389218
[os]
to=
term=2025-12-18