Posted by on the 29th of March, 2022 at 11:42 am under 컴퓨터.  This post has no comments.

회사에서 쓰는 가상 컴퓨터에서 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를 안깔아서 안해봤음



* Required

The URI to TrackBack this entry is:
https://bmp.pe.kr/blog/index.php/2022/03/29/linux%ec%97%90%ec%84%9c-snap%ec%9d%84-%ec%93%b0%ea%b3%a0-%ec%8b%b6%ec%9d%80%eb%8d%b0-home-directory%ea%b0%80-home%ec%9d%b4-%ec%95%84%eb%8b%8c-%ea%b2%bd%ec%9a%b0/trackback/