Linux를 android 폰에 설치하기
on
이와 관련된 내용들을 여기 저기서 찾아볼 수 있는데 나에게 도움이 된 것은 하나도 없었다. 대개 ‘…이렇게 하더라’였지 ‘내가 … 해봤더니 잘되더라’가 아니고, 대개는 어딘가에서 복붙한 것이거나 번역했거나 한 것들이었다.
대개는 linux deploy라든가 andronix를 쓰면 된다 였는데, 나 잘 모르겠다. 내 경우는 두 가지 경우 모두 만족스럽지 못했고 마침내는 모두 수동작업으로 완료했다. 그리고는 결과에 만족할 수 있었다.
왜? 이미 알려진 방법들에 대해서 얘기하자면,
- linux deploy는 구형폰 혹은 구형 안드로이드에서는 어떻게든 되긴 하지만 일종의 자동 프로세스로 설치가 이루어지기 때문에 도무지 이 녀석이 어떤 식으로 설치하고 있는지 알 수 없다. 그러니까, 간편한 것을 원하지만 디테일한 것들을 컨트롤하고 싶은 생각이 없다면 권한다. 일단 rooting을 해야한다. 그렇다고 해서 특별히 어떤 게 좋은지는 모르겠다.
- andronix는 일종의 스크립트를 제공하는 것이고 실제의 일은 termux에서 일어나는 것이다. termux의 proot를 이용하는 것인데, 일반적으로 알려진 chroot에 약간의 꼼수를 넣어 만든 것이다. 역시나 내가 전권을 휘두르고 싶고 폰을 조금이라도 더 쥐어짜고 싶다면 이 방법은 비추다.
- termux 수준으로 만족한다고 하면 리눅스를 별도로 설치하는 것은 비추다. termux가 설치/사용이 굉장히 편리하기 때문에 semi-native한 방법으로 linux를 설치하는 것은 많은 고난이 따른다.
먼저, 일을 시작하기 전에 내가 왜 이 일을 하려하는가에 대한 답이 필요하다. 나름 노가다라 ‘재미삼아’ 한다거나 또는 뚜렷한 목적이 있어야 한다. 아니면 시간과 노력 + 약간의 스트레스를 감내해야한다.
나는 이 일을 왜 했는가?
- 심심해서 뭔가 새로운 자극이 필요했다.
- 놀고 있는 멀쩡한 폰이 너무 안쓰러웠다. 나는 라스베리 파이를 주로 사용하고 있지만 분명히 내 퇴역 안드로이드폰이 그것보다 훨씬 좋은 하드웨어라는 것을 알고 있지만, 이런 저런 한계로 그냥 탁상 시계 용도로 쓰여지고 있는 것이 답답했다.
- 기왕에 탁상시계가 될 거라면 집안에 모든 인터넷 관련 일들을 관할하면서 semi-NAS 역할도 시키고 docker로 이런 저런 서비스도 시키고 등등 다용도로 쓰고 싶었다.
- 안드로이드의 장점(미려한 외관/GUI)도 살릴 수 있으면 더 좋겠다 싶었다. 그러니까 안드로이드와 리눅스 세게의 장점을 전부 취하겠다 이런 생각이 있었다.
오직 리눅스를 제대로 설치해서 거의 모든 기능을 전부 다 android 위에서 굴려보고 싶다면 권하는 방법이다.
그러면 나는 어떤 방법을 권하는 거냐 라고 물어보지 싶다.
- 일단 폰을 루팅해야 한다.
열심히 사용하는 폰을 루팅하고 거기에 리눅스를 심으려는 사람은 아마도 없지 싶은데, 어차피 놀고 있는 혹은 버리려는 폰을 어떻게든 유용하게 써보려는 생각에서 하는 것이라면 당연히 루팅을 해야한다. 기왕이면 OS도 third party ROM으로 새로 올려서 쓰는 것을 추천한다. 나는 PixelExperience를 올려놓고 그위에서 안드로이드 앱도 굴리고 linux도 같이 굴려볼 생각으로 이 작업을 시작했다. 그러니까 안드로이드로 하기 어려운 작업들은 리눅스로 하고 리눅스에서 하기 뭐한 GUI 작업들은 안드로이드에서 하려고 한 것이다. CPU가 충분히 빠르기 때문에 뭘 해도 잘 돌아간다. 물론 PC만은 못하겠지만. 그렇다고 라스베리파이나 오드로이드처럼 무한대의 자유가 주어지는 것은 아니라서 노가다와 권한 사이에서 적당히 타협해야한다.
어차피 이런 설치는 마치 docker에 container를 새로 들이는 것과 다르지 않아서 systemd로 뭔가를 부팅할 때부터 자동실행시키고 주기적으로 뭔가를 해야하는 일을 시키는 것은 적당하지 않다. 그냥 안드로이드로 적당한 앱이 없을 때 적당히 스크립트를 짜서 뭔가를 하려고 할 때 유용하다고 해야할까.
- 루팅한 후에 리눅스관련 명령어를 필요로하니 어쩔 수 없이 busybox를 설치한다.
어쩔 수 없다. 이것은. chroot도 써야하니까 여기에 root 권한을 부여받아야 내가 설치하는 리눅스로 나름 많은 권한을 행사할 수 있게 된다.
- 폰을 debug mode로 설정해서 USB로 접근한다.
adb shell를 이용해서 들어가고 몇 가지 작업을 하면 linux를 설치하고 그 안으로 chroot할 수 있게 된다. 그럼 일단 끝.
Termux에서 Geekbench를 돌렸을 때는 (CPU가 snapdragon 730G이다) single core: 550, multi core: 1649 정도의 점수가 나왔던 것 같은데, chroot로 돌려보면 대략 single core: 559 multi core: 1672 로 나온다. 유의미한 차이를 발견하기 어렵다. 들어간 노가다의 비용은 대략 비슷했으니까 어느 것이 더 낫다 아니다 할 수는 없을 것 같다. 차이는 내가 설치한 것에 대해서 얼마나 알고 있느냐 모르고 있느냐, 그에 따라 세밀한 컨트롤/유지/보수가 가능하냐 아니냐의 차이일 뿐. 어쨌든 이 점수는 geekebench의 android benchmark chart에 나오는 점수보다 조금 높으니까 일단은 성공한 거라고 볼 수 있을 듯 하다. 대충 이 정도면 10년전쯤에 나왔을 랩탑용 i5 정도의 속도는 나오는 거라고 볼 수 있다. (이번에 다시 깨닫았지만 동일 시점에 발매된 스냅드래곤과 애플의 A씨리즈의 성능차는 어마어마하다.)
혹시나 궁금한 사람들을 위해 덧붙여본다. Raspberry pi 4는 대략 233, 676 정도의 점수가 나온다. 사실상 나름 노후된 안드로이드 폰과 비교가 불가하다. USB-C port만 잘 활용해도 훨씬 좋은 결과를 얻을 수 있다. 다만 이를 위해서 USB-C dock이 필요할 뿐.
일단 한계는 명확하다. chroot로 일종의 서브 디렉토리의 linux를 실행하는 것에는 불편함이 많다. dbus를 제대로 쓰지 못해서 어떤 서비스들은 안도는 게 제법 있고 (이것도 해결 방법이 있다고는 하는데 아직 해보진 못했다), 폰을 껐다켜면 내부의 리눅스는 수동으로 재가동을 해주어야 한다.
고정적으로 전원을 공급하면서 탁상시계 내지는 알람시계, 더러는 미디어 센터, NAS로 활용하려는 내 입장에서는 리눅스를 설치하면 좋았지 별로 아쉬울 게 없다. USB3로 HDMI 출력만 잘되면 이동식 컴퓨터로도 활용이 가능할텐데 아직 그것은 쉽지 않다.