Linux를 android 폰에 설치하기

이와 관련된 내용들을 여기 저기서 찾아볼 수 있는데 나에게 도움이 된 것은 하나도 없었다. 대개 ‘…이렇게 하더라’였지 ‘내가 … 해봤더니 잘되더라’가 아니고, 대개는 어딘가에서 복붙한 것이거나 번역했거나 한 것들이었다.

대개는 linux deploy라든가 andronix를 쓰면 된다 였는데, 나 잘 모르겠다. 내 경우는 두 가지 경우 모두 만족스럽지 못했고 마침내는 모두 수동작업으로 완료했다. 그리고는 결과에 만족할 수 있었다.

왜? 이미 알려진 방법들에 대해서 얘기하자면,

먼저, 일을 시작하기 전에 내가 왜 이 일을 하려하는가에 대한 답이 필요하다. 나름 노가다라 ‘재미삼아’ 한다거나 또는 뚜렷한 목적이 있어야 한다. 아니면 시간과 노력 + 약간의 스트레스를 감내해야한다.

나는 이 일을 왜 했는가?

오직 리눅스를 제대로 설치해서 거의 모든 기능을 전부 다 android 위에서 굴려보고 싶다면 권하는 방법이다.

그러면 나는 어떤 방법을 권하는 거냐 라고 물어보지 싶다.

  1. 일단 폰을 루팅해야 한다.

열심히 사용하는 폰을 루팅하고 거기에 리눅스를 심으려는 사람은 아마도 없지 싶은데, 어차피 놀고 있는 혹은 버리려는 폰을 어떻게든 유용하게 써보려는 생각에서 하는 것이라면 당연히 루팅을 해야한다. 기왕이면 OS도 third party ROM으로 새로 올려서 쓰는 것을 추천한다. 나는 PixelExperience를 올려놓고 그위에서 안드로이드 앱도 굴리고 linux도 같이 굴려볼 생각으로 이 작업을 시작했다. 그러니까 안드로이드로 하기 어려운 작업들은 리눅스로 하고 리눅스에서 하기 뭐한 GUI 작업들은 안드로이드에서 하려고 한 것이다. CPU가 충분히 빠르기 때문에 뭘 해도 잘 돌아간다. 물론 PC만은 못하겠지만. 그렇다고 라스베리파이나 오드로이드처럼 무한대의 자유가 주어지는 것은 아니라서 노가다와 권한 사이에서 적당히 타협해야한다.

어차피 이런 설치는 마치 docker에 container를 새로 들이는 것과 다르지 않아서 systemd로 뭔가를 부팅할 때부터 자동실행시키고 주기적으로 뭔가를 해야하는 일을 시키는 것은 적당하지 않다. 그냥 안드로이드로 적당한 앱이 없을 때 적당히 스크립트를 짜서 뭔가를 하려고 할 때 유용하다고 해야할까.

  1. 루팅한 후에 리눅스관련 명령어를 필요로하니 어쩔 수 없이 busybox를 설치한다.

어쩔 수 없다. 이것은. chroot도 써야하니까 여기에 root 권한을 부여받아야 내가 설치하는 리눅스로 나름 많은 권한을 행사할 수 있게 된다.

  1. 폰을 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 출력만 잘되면 이동식 컴퓨터로도 활용이 가능할텐데 아직 그것은 쉽지 않다.