Archives for March of 2022
- Linux에서 snap을 쓰고 싶은데 home directory가 /home이 아닌 경우 (29th of March, 2022)
회사에서 쓰는 가상 컴퓨터에서 snap이 동작을 안해 찾아본 기록.
snap으로 설치한 앱을 실행해보면 이런 메시지가 뜨면서 되지 않는다.
Sorry, home directories outside of /home are not currently supported.
See https://forum.snapcraft.io/t/11209 for details.
snap 소스를 찾아보니 setup_user_data 함수에서 에러를 출력하는데 SNAP_USER_DATA 환경변수가 문제였다.
https://github.com/snapcore/snapd/blob/master/cmd/snap-confine/user-support.c#L27
SNAP_USER_DATA 환경병수는 userEnv 함수에서 설정하는데 이때 golang에서 제공하는 user.Current를 통해 정보를 얻어온다.
https://github.com/snapcore/snapd/blob/master/snap/snapenv/snapenv.go#L104
그리고 golang은 /etc/passwd 파일에서 직접 사용자 정보를 읽어온다.
https://github.com/golang/go/blob/master/src/os/user/lookup_unix.go#L19
1. local 사용자 추가
home directory가 /home 에 있는 local 사용자를 추가한다. 그리고 local 사용자로 전환해서 실행
(outside /home user)@localhost $ xhost +localhost
(outside /home user)@localhost $ sudo su – local_user
local_user$localhost $ (run snap application)
xhost를 실행해야 X Window 앱이 화면에 나온다.
2. snap 소스 코드 수정 (안해봤음)
현재 사용자용 디렉토리를 /home 에 하나 만든다. 그리고 snap 소스코드를 고쳐서 SNAP_USER_DATA 환경변수 설정할 때 prefix를 /home 쪽으로 바꿔치기 한다.
3. golang 소스 코드 수정 (안해봤음)
현재 사용자 home directory를 /etc/passwd 파일에서 얻어오는데 특정 환경변수로 override 할 수 있게 한다.
4. snap에서 공식적으로 알려주는 workaround (안해봤음)
https://snapcraft.io/docs/home-outside-home
그런데 회사 가상 컴퓨터에서 했다가 문제 생길까봐 안해봤음
5. docker를 이용한 방법 (안해봤음)
https://askubuntu.com/questions/1207472/how-do-you-actually-run-a-snap-package-when-your-home-directory-isnt-under-h
회사 가상 컴퓨터에 docker를 안깔아서 안해봤음