chroot?
os-level 에서 제공하는 심플한 가상화 기법
chroot 시스템콜을 부르면, 프로세스 자신의 root directory(/) 를 다른 곳으로 변경할수 있다.
(= 다른 rootfs 사용)
프로세스가 접근할수 있는 디렉토리가 chroot-jail 내로 제한되므로, 몇가지
확실한 이점이 생긴다.
1) 프로그램 실행할때
- 별도의 hw 없이, process 별로 독립적인 공간 제공가능
- ex) qemu 로 다른 아키텍쳐 vm 구성
2) 프로그램 빌드할때
- 잘못된 의존성을 따라가는 상황 방지
(= 직접 컴파일러, 소스받아서 빌드시 깔끔한 빌드가 가능)
- ex) cross compile, lfs build
Pre-requisites
magisk 로 루팅된 태블릿, termux
why not just use linux deploy?
https://wiki.termux.com/wiki/PRoot#PRoot_vs_Chroot
linux deploy 는 meefik busybox 를 설치해야 하는데,
오래된 패키지여서 그런지, 없는 볼륨(/system) 을 rw 로 remount 시도하고 설치실패가 된다.
설치스탭 원본링크
https://ivonblog.com/en-us/posts/termux-chroot-ubuntu/#1-install-busybox-for-android-12-devices
설치스탭
1) Magisk Builtin Busybox 설치
- Fox's Magisk Module Manager 설치
(FoxMMM == Androidacy Module Manager == AMM)
- AMM 열고 Magisk repository 활성화
- Magisk Builtin Busybox 검색 후 설치
2) Ubuntu base rootfs 준비
3) chroot 스크립트 작성
( busybox 바이너리를 사용해서 mount, chroot )
- /data remount
- /dev, /sys, /proc, /dev/pts bind-mount
- /sdcard bind-mount
- chroot /data/local/tmp/chrootubuntu su - root
- umount /dev, /sys, /proc
4) sh "chroot 스크립트"
( child shell 만들어서 실행하라는 뜻 )
5) chroot-jail 내에 apt 환경설정
- /etc/resolv.conf : nameserver 8.8.8.8,
- /etc/hosts : 127.0.0.1 localhost
- aid_inet(3003), aid_net_raw(3004), aid_graphics(1003) 그룹생성
- _apt 유저를 aid_inet, aid_net_raw 에 등록
- root 유저를 aid_inet 에 등록
6) apt update; apt upgrade
- 그 외에 vim net-tools sudo git 도 설치
7) sshd 설치, sshd 실행
- apt install openssh-client openssh-server
- passwd root
- mkdir /run/sshd; /usr/sbin/sshd -D &
8) xfce4, vncserver 설치
- apt install xfce4 xfce4-goodies
- update-alternatives --config x-terminal-emulator (xfce4 로 변경)
- apt install tigervnc-standalone-server tigervnc-xorg-extension
- vncpasswd
9) vncserver startup 스크립트(~/.vnc/xstartup) 추가, vncserver 실행
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADRESS
export PULSE_SERVER=127.0.0.1 && pulseaudio --start --disable-shm=1 --exit-idle-time=-1
exec startxfce4
chmod +x ~/.vnc/xstartup
vncserver -localhost no (종료는 vncserver -kill :1)
10) Optional: pulseaudio 설정 및 일반 user 생성
일반 termux
pulseaudio --start --load="module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1" --exit-idle-time=-1
pacmd load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1
chroot (아래 명령 수행후 user 에 sudo 권한부여)
groupadd storage
groupadd wheel
useradd -m -g users -G wheel,audio,video,storage -s /bin/bash user
passwd user
ubuntu 동작확인
chroot 환경에서 vncserver 구동, avnc 어플로 접속
- rootfs : (ubuntu22)
- desktop environment (xfce4)
confer.
chroot "su -" 를 써야 하는 이유 : 기존 유저의 PATH 랑 환경변수 쓸께 아니기 때문