오늘은 GKI 빌드를 시도해봅니다.

GKI는 안드로이드에서 Treble의 거진 마지막 단계로, 플랫폼뿐만 아니라, 커널도 단일된 하나의 커널을 쓰겠다는 정책입니다. 현재 안드로이드 플랫폼은 제조사마다 여전히 차이가 있지만, 개발단계에서는 GSI를 사용하여, 업데이트가 벤더에 의존하지 않고 독립적으로 될 수 있도록 테스트등을 진행하도록 하고 있습니다. 물론… 잘 되고 있는지는 의문입니다만, 결국 구글의 것은 구글의 것대로 하나로 관리하겠다는 의도로 보입니다. 여태까지는 제법 잘 굴러가고 있지만, 부담이 없는건 아니겠지요.

아무튼 GSI AOSP던 GKI던 모두 근본 오픈소스 프로젝트에 기반하여, 코드는 공개되어 있고, 모두 확인하고, 빌드하고,, 기회가 있다면, 단말이나, 가삼머신에서 실행해 볼수 있겠죠.. 그래서,, 해봅니다. 오늘은 GKI입니다.

커널 소스는 안드로이드 사이트에 구글치고는 꽤 상세한 설명과 함께, 코드 접근 방법등이 설명되어 있습니다.
https://source.android.com/devices/architecture/kernel

코드는 아래에서 접근이 가능하겠고요.
https://android.googlesource.com/kernel/common/

현재 최신 버전의 안드로이드에 밀고 있는 커널은 5.4커널입니다. 이번에 Ubuntu 20.04 LTS도 5.4커널이라고 하지요. 문서화 된 내용들을 보면, 상당히 깊이가 있고, 뭔가 안드로이드 특화된 기능들이 많이 기술 되어 있는데요. 현재 안드로이드 커널과, 리눅스 커널은 약간 밀당 관계라, 리눅스 mainline upstream으로 들어가는것도 있고, 여전히 못들어가고 Android mainline에서만 들어가고 있는 것들이 있습니다. 나름 기술적인 의도로 대부분 판단하지만, 이게 또 정치판하고 같아서, 패치하나로 설전이 오가는 메일쓰레드 구경하는 것도 재미가 제법 쏠쏠합니다.

아무튼 코드를 받아서 빌드를 시도해봅니다. 머신에 여타 빌드 환경같은것 설정한게 없으니, 무작정 돌려봅니다.
make gki_defconfig 돌리면 처음 맞이하는게
scripts/Makefile.host:9: recipe for target ‘scripts/kconfig/lexer.lex.c’ failed

네 학교에서 배운 기억이 납니다. Lexer가 없네요.. 오픈소스에서 컴파일 하면 들어가야 하는, 그러니까. GCC, G++같은 컴파일러를 만들고자 할때 쓰는. 구문해석기. BISON, FLEX를 깔아줍니다. 원래는 LEX/YACC지만.. 오픈소스 Free Software니까…

빌드 2차시도
error: Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel
네. 바이너리 관련해서 또 처리를 못하네요.. 앞에 두개만 깔고 다시 시도해봅니다. 근데 libelf-dev는 없다고 나오네요.. Ubuntu 18.04인데.. 그냥 하나만 깔고 시도해봅니다.

scripts/extract-cert.c:21:10: fatal error: openssl/bio.h: 그런 파일이나 디렉터리가 없습니다
#include
^~~~~~~
compilation terminated.
scripts/Makefile.host:107: recipe for target ‘scripts/extract-cert’ failed
make[1]: *** [scripts/extract-cert] Error 1
make[1]: *** 끝나지 않은 작업을 기다리고 있습니다….

자 이제 생각없이 안깔아본 세번째를 깝니다. 세번째도 없네요.. 흠.. 첫번째 제안 패키지만으로는 아직 뭔가 부족한가봅니다.
구글신게 도움을 요청합니다.
https://github.com/TinkerBoard/debian_kernel/issues/26
libssl-dev 라고 하는군요

뭔가 HDRINST라는게 무식하게 많이 찍히고, HDRTEST가 많이 찍히고, 평소 보던 CC/AR 이 간간히 보입니다. 헤더 다루는게 예전보다 더 많아진 모양입니다. Precompiled Header하고 하기에는, 같은게 너무 많이 반복적으로 나오는게, 좀 비효율인 처럼 보이기도 하네요..

빌드가 잘 진행되는데,, 생각보다 많이 느려서, top으로 잠시 살펴봅니다… 별 생각 없이 ntfs로 포맷한 SSD에다 받아놓고 빌드를 했는데, mount.ntfs가 CPU 50%이상을 먹고 있네요 –;; 화딱지 나서, 받아놨던걸 살짝 옮겨놓고, ext4로 다시 밀어버리고 빌드를 합니다. 이제야, 70%대에서 놀던 CPU들이 90%까지 바득바득 일을 하기 시작하네요.. 역시 순정(?)이 좋습니다.

이번엔 Kivy입니다.(kivy는 좀 나중에보고, Termux먼저 봅니다)

지난번에 업무상 필요한 툴들을 모아둘 필요가 있어, 여러 Bash툴들을 Python으로 컨버팅하면서, PySimpleGUI로 약간의 GUI를 곁들여 만들어 본게 있습니다. 이번엔 안드로이드 단말에서 뭔가 간단하지만 약간은 난이도가 있는 쉘 기능을 활용해야하는 경우가 발생해서, Kivy로 갑니다. 구글검색으로 국내 블로그등에서도 별로 다루지는 않았던 듯 합니다. 2013년도 쯤부터 몇몇 글이 보이고, 2018~2019년도 들어오면서 좀더 주목받고 유튜브 외국 강좌도 보이고, Udemy에도 강좌가 보이고 하는데, 굳이 초 다중 MultiPlatform을 타겟하는게 없어서인지, 각각의 OS마다 이미 충분하게 개발환경이 편하게 되어 있어서인지 모르겠는데, 일단 해봅니다. 목적은 어디까지나 안드로이드 앱으로 쉘 기능을 간단하고 편하게 잘 써보기 입니다. 권한 막히는 것은 뭐 어쩔수 없겠지요…

일단 Kivy가 그렇게 확 뜨지 않는건, 일단 영어고.. PySimpleGUI처럼 Cookbook스타일의 예제 중심의 따라하기가 조금 모자란면도 있어 보입니다.

10분뒤…

원래 생각했던건 약간의 GUI가 있으면 좋겠다였고, 쉘기능이 잘 되면 좋겠다였어서, 기준이 되는 앱은 Termux였습니다… 근데 소스가 공개되어 있네요 –;; 바로 방향전환 합니다…

https://github.com/termux/termux-app

마인크래프트 서버 hotfix로 업데이트

일요일 아이들이 또 마인크래프트 시켜달라고 졸라서, 접속했더니, Client가 업데이트가 되었습니다. NAS에 돌고 있던 이전버전의 마인크래프트 서버를 바로 버전이 낮다고 접속을 거부해버리네요 –;; 부랴부랴 다시 받아서, 기존 월드백업하는 방법도 모른채로, 그냥 새버전 받아다가 기존 것의 server.properties.랑 json등을 보전해두고, 새버전의 서버 를 먼저 Overwrite하고, properties랑 json파일 복구하니 기존 월드가 복구가 되네요.. 다행입니다.

근데, 솔직히 NAS도 마인크래프트 아니면 쓸일도 없고, 데이터야 WOL로 기존에 쓰던게 있었어서 전기요금이 아까운 생각이들어서… 놀고 있는 DELL Venue 8 Pro에게 새로운 임무를 맡겨보려고 작업중입니다. 분명.. 엄청 버벅일테지만. 애들 둘이랑 저 딱 세명 접속하는 서버니.. 용량도 그렇고 어느정도 버텨줄거라 믿고. 아낀 전기요금으로, 여름에 아이스크림이나 더 사먹자는 생각으로 기존 리눅스 서버로 돌고 있던 파일들을 윈도우 서버로 복사해서 서버를 구동하려 했는데.. 복병이.

윈도우 버전과 호환이 안된다고 하네요 –;;; 일단 윈도우 업데이트도 한참을 밀린거라 최신 배포판으로 업데이트가 가능한건지 알아봐야겠습니다. 혹여나 태블릿 버전은 뭔가 따로 체크하는 거면. 다른 방법 생각해봐야겠네요. 일단 1909 받아오는게 되니.. 내일다시 해봐야겠네요. 지난 경험상.. 거의 하루 꼬박걸렸습니다. 마치 맥OS 업데이트 같은 –;;

+ 2020-04-20 +
아.. 망했습니다. 만 하루가 다 지나고 1909로의 지루한 업데이트가 끝나고 다시 실행시켜봤는데. 여전히 호환되지 않는 운영체제라고 떠서, 설마하는 마음에 시스템에 들어가보니.. 32비트 Win10이었던 것이었습니다. 마인크래프트쪽을 살펴봐도 32비트 지원얘기는 없고, 델쪽을 가봐도 64비트 Win10지원 얘기는 없네요. 바이오스에서 64비트 포기했다는 2015년도 글이 보이는군요. –;;;; 그래서 지금은 리눅스 까는 법을 찾아보고 있습니다 –; 일단 USB부팅이 되는지부터 보고, USB로 우분투 64가 부팅이 되면 그걸로 일단 가동시켜보려 합니다.

64bit ubuntu 를 bare로 booting하는것도 BIOS때문에 안된다는 글이 있어서 일단 후퇴하고, 더 괴상한 VirtualBox를 찾아보고 있습니다. 이도 안되면…. 무료 클라우드 서버 찾아보려 합니다 –;

VirtualBox 6.1.6은 32비트 Host를 지원하지 않는 다는 크리를 한방 맞고, 옛날버전 찾아보고 있습니다. 5.2.40은 32비트 OS를 지원하는 군요.. 휴..

VirtualBox5.2.40에 Ubuntu 18.04 Server설치중입니다. 찾다보니 이런 미친 짓을 하신분도 있네요. 네. 전 안할껍니다.. 하지 말래요..
https://jamesachambers.com/official-minecraft-bedrock-dedicated-server-on-raspberry-pi/

Dell Venue 8 Pro + VirtualBox 5.2.40 + Ubuntu 18.04 Server로 2GRAM중 1G를 할당하고 10GB공간으로 딱. MineCraft BedRock Server구동이 잘 되네요. 일단 혼자 접속하긴 했는데. 살짝 보니. 약간 오브젝트 사라지는게 조금 굼뜬 느낌이긴 하지만. LAN환경에서 특별히 MOD없이 즐기기에는 아직은 충분해 보입니다. 이걸로 다행히 NAS용도의 MicroServer는 본래 용도로 돌아가고 WOL모드로 돌려놓고, Dell Venue는 게임할때만 VirtualMAchine 가동시키는 형태로 전기료를 크게 절약할 수 있을 것 같네요 ^^

맥북을 샀습니다.

중고로 샀습니다. 2012 mid  13인치 맥북프로입니다.
당근마켓 뒤적거리다가 근처에 파시는 분들이 여럿 있었는데, 2012이후로는 2014 2015 2017 2018로 가면 가격이 점점 제 현실과는 멀어져서, 2012 mid로 굳혔습니다.
기본스펙인 i7 2.9ghz 8g 750 hdd 인데.

받아오자마자 가지고 있던 Thinkpad X230T의 8+8 을 바로 이식해줬습니다. 윈도우에서 솔직히 16GB는 아직은 낭비(세대에 비해서)인 상황이 그동안 IBM PC만 사용하던 제게는 약간 어색하네요. 애플이 하드웨어 잘 만든다 싶지만, 메모리 업그레이드 따져보려면.. 스펙 외는 상당히 많이 탄다는 글도 보이고… 근데 인텔에서 같은 레퍼런스 받아서 거진 같은 보드에 같은 특성일텐데.. 쩝.. 아무래도 OS등에 타이밍관련해서 여러 최적화들이 들어갔겠지요.. 이런점은 임베디드가 제 주업인 입장에서 이해는 합니다… 그래도 맥인데.. 아쉽긴 합니다.

다음 타순은 SSD교체입니다.. 이래저래 남아도는게 많아서 — 뭐하다 꿔다 넣어줘야겠네요.. 830은 좀 위험할것 같기도 하고.. 시대가 얼추 비슷해서 맞을것 같기도 하고 애매하네요… 근데 어째 가지고 있는 컴퓨팅 디바이스들이, 샤오미 북프로를 제외하고는 죄다 2012년도 전후 기기들이 되어버렸네요 –;;;  그동안 필요를 못느낀 게임. 개발. 둘다 열심히 하지 않았다고 스스로 되뇌이고 있습니다. 이젠 좀 다시 굴려봐야겠네요. 애들도 스스로 하는게 있으니까요

—- 2020. 4.17 업데이트

한영전환으로 Capslock쓰는것에 조금 익숙해지는것과 마우스 스크롤이 위아래가 다르다는 것에 조금 적응 한 뒤에, Microsoft Wiress Keyboard/Mouse 800을 붙이고, 집안 어딘가에서 굴러다니던, MiniDP to DP 컨버터와 DP to HDMI케이블로 놀고 있던 24인치 TV모니터에 붙이니, 나름 쓸만한 환경이 되네요. 맥북 디스프레이는 조용히 닫아서 좀더 수명을 연장시켜주고요. 이러다보니 느려지는 느낌이 확 와서… 바로 SSD이주 작업을 실시했습니다. 인터넷 살짝 작아보면, 안되는 SSD도 있고 그렇다는데. 830은 별로 안타는 것 같네요. Command+R로 부팅시 미리 SSD를 포맷하고, 복원으로 기존 파티션/애플 볼륨을 그대로 복사해주면. 그냥 기존 환경이 그대로 이주가 되네요. 아주 편합니다. 초반에 SSD GPT잡을때 살짝헤멨는데, 파티션 구성테이블이 맨 위쪽 Tree메뉴고, 그 바로 아래가 볼륨들이었네요. 초반에 이미 MBR로 되어 있어서, 볼륨만 가지고 수차례 오른쪽 클릭하여 지우기를해도 원하는 게 안나왔는데. 한칸 더 올라가서 지우기를 하니 GPT로 변경이 가능하네요. 이미 HDD상태에서 Catalina로 바꾼게 있어서, SSD로 옮기고 바로 다 처리가 되었습니다.

지난번 분해 글에서 살짝 팁같은걸 안적은것 같은데. 나사를 다시 조일때 앞쪽과 옆쪽은 살짝 기울여서 나사를 넣어야 제대로 부드럽게 되네요. 경사면하고 맞추려고 일부터 나사구멍도 기울여 놓은 것 같습니다.애플을 느낄 수 있는 시간이었네요. 집에 있엇.. 올드맥도 아닌, 초구형 파워맥도 다시 한번 느껴보게 집으로 가져와바야겠습니다.

 

ChromeBook 에서의 Python어디까지 될까?

ChromeBook에서 Linux환경을 지원하고 있습니다. apt도 되고, python패키지들도 무리없이 되는데요.
이번에 브라우저 런처를 만들다보니. 크롬북도 될까? 라는 의문이 들어서 직접 해보기로 했습니다.
pysimplegui의 설치는 무리없이 잘되었고요.
구글플레이스토어가 있는데, 여기서 아마 VisualStudioCode도 되니 PyCharm도 깔 수 있을 것 같긴한데. 이래저래 다 해보기로 합니다.

그냥 Jetbrain ToolBox하나면 AndroidStudio나 PyCharm 그냥 리눅스처럼 설치가 되네요 –;;
https://www.jetbrains.com/help/pycharm/installation-guide.html

우선 pysimplegui와 pyinstaller는 설치가 되지만, 일반적인 우분투의 환경에서처럼 편리하게 pyinstaller명령을 쓸수도 없고, python3로 스크립트를 실행시켜도 invalid syntax로 실행이 안되네요. 2,3나 위치는 다른데 invalid syntax로 걸립니다.
그리고 compile된 바이너리를 실행하면
GLIBC_2.25 의존성이 안 맞는다고 실행이 안되네요.
이부분은 뭔가 다른 어플리케이션에서도 유사한 에러가 나온것이 있어. container업데이트로 해결한게 있어서 따라해보고 있습니다. 보니까. Debian Strech에서 Buster로 apt source를 옮겨서 받아오는 모양이네요.
https://github.com/TablePlus/TablePlus-Linux/issues/24
https://gitlab.com/ppulfer-random-stuff/debian-buster-in-crostini/blob/master/upgrade_container.sh

이후 설치할게 좀 많네요..
sudo apt install python-pip, python3-pip, python-tk, python3-tk
pip3 install pysimplegui

까지 설치하고 나니. 스크립트로 실행이 됩니다.
이제 다시 pyinstaller로 해봐야겠네요.
pip3 pytinstaller
설치과정을 다시 자세히 보니 아무래도, PATH설정이 안된 것 때문인 것도 있던 모양입니다. PATH설정하면, pyinstaller로 바로 실행이 될 것 같네요.

Collecting pyinstaller
Using cached https://files.pythonhosted.org/packages/3c/c9/c3f9bc64eb11eee6a824686deba6129884c8cbdf70e750661773b9865ee0/PyInstaller-3.6.tar.gz
Installing build dependencies ... done
Requirement already satisfied: setuptools in /usr/lib/python3/dist-packages (from pyinstaller) (40.8.0)
Collecting altgraph (from pyinstaller)
Using cached https://files.pythonhosted.org/packages/ee/3d/bfca21174b162f6ce674953f1b7a640c1498357fa6184776029557c25399/altgraph-0.17-py2.py3-none-any.whl
Building wheels for collected packages: pyinstaller
Running setup.py bdist_wheel for pyinstaller ... done
Stored in directory: /home/jiwonuskim/.cache/pip/wheels/62/fe/62/4c0f196d1e0dd689e097449bc81d7d585a7de7dd86b081b80b
Successfully built pyinstaller
Installing collected packages: altgraph, pyinstaller
The scripts pyi-archive_viewer, pyi-bindepend, pyi-grab_version, pyi-makespec, pyi-set_version and pyinstaller are installed in '/home/jiwonuskim/.local/bin' which is not on PATH.

Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

Successfully installed altgraph-0.17 pyinstaller-3.6

이 상황에서, 전에 빌드해놓은 ELF바이너리도 정상으로 수행되고.
pyinstaller로 새로운 바이너리 빌드도 정상으로 되네요.
그리고 ChromeOS의 Linux공유 폴더 마운트된 곳은 Write권한이 없어서, 안되니 Home등으로 옮기고 작업을 해야하겠습니다.
근데, 용량이 조금 더 크네요. 환경에 잡혀있는 모든 모듈들을 다 넣는건지,, 용량이 제법됩니다. 최적화는 필요해보입니다.
브라우저야 어차피 크롬이라, 그냥 탭으로 잘 실행되네요.

PySimpleGUI로 뭐라도 만들어보기(웹브라우저런쳐)

회사에서 일을 하면서 여러가지 툴들을 만드시는 분들을 봅니다.
이번에는 윈도우 환경에서 간단하게 JIRA의 이슈시스템의 번호를 입력하면, 바로 브라우저 런칭을 해주는 툴을 배포하시는 분을 보고.
따라하기로 마음 먹었습니다.
네, 저는 회사에서는 우분투리눅스를 주로 사용하기 때문에 그분의 툴은 사용하기가 조금 불편했기 때문입니다. T.T
기왕 따라하기로 마음 먹은바, 제가 아는 선에서의 모든 간단한 툴들을 모아봅니다.
그중 가장 쉬운게. Python 이고, 세상은 너무나 편해져서, 이제 그냥 몇줄만 짜로 간단한 프로그램이 툭 튀어 나오는 시대니까요.

사용할 명령어는 PySimpleGUI에서 제공하는 몇가지 Recipe들을 베끼고, Browser Launching하는 예제대로 좀 베끼면 나올 것 같습니다.

일단 개발을 위해서 Python 설치는 필요하고요. Visual Studio Code로 환경까지 깔끔하게 하면 좋겠지만(https://pysimplegui.readthedocs.io/en/latest/#polishing-your-windows-building-beautiful-windows, pyCharm이 공식 1번 IDE니 쓰면 좋겠지만 나중에 할랍니다). 그건 먼저 뭐라도 만들고 난 다음으로 미루겠습니다.
https://pypi.org/project/PySimpleGUI/
pip install pysimplegui 면 되네요.
그리고 저도 따라하는김에 배포도 생각해보면, 걸출한 pyinstaller를 쓰면 되겠고요.
pip install pyinstaller
다른건 필요없고, 그냥
pyinstaller -F script.py
명령이면, 리눅스면 ELF, 윈도우면 EXE 파일하나로 나오니 참 편하네요.
단, 해당 환경에서의 실행파일Generation만 된다고 적혀 있네요. Linux나 Mac등에서 Window는 Wine으로 가능하고, 기타 가상 환경이 있으면 가능한것 같은데. 뭐. 해야죠.

기본적인 GUI form은 아래에서 따오고요.
https://pysimplegui.readthedocs.io/en/latest/cookbook/
브라우저 런칭은 아래를 좀더 참고하면 되겠네요.
https://www.oreilly.com/library/view/programming-python-second/0596000855/ch04s06.html
찾다보니 아래도 나오는데, 저 Conway’s Game Of Life가 제가 어릴적에 접했던 책의 예제 어플이네요. 한동안 찾았었는데, 여기서 다시보게 되는군요.
https://pysimplegui.trinket.io/demo-programs#/games/conways-game-of-life
제일 간단한건 아래를 참고하면 될 것 같네요
https://www.geeksforgeeks.org/python-launch-a-web-browser-using-webbrowser-module/

네.. 금방 되었습니다. –; 굳이 파일같은건 안올리겠습니다. 그냥 기본 예제에 위에서 browser launch하는거 한줄 추가하면 끝나네요.. 거기에 입력값에 따라 가변으로 URL String변환해주는건 Python에서 너무나도 쉬운일이니, –;
기왕 온거 UI라고 I18n처리를 해보려고 뒤적여 봤습니다. 요즘 앱이라면 이 정도는 기본이죠..

흐음. 아무 생각없이 넣었던 아래 참고 사이트가 악성사이트로 분류되네요 –;;;; 흐음.
https://lokalise.com/blog/beginners-guide-to-python-i18n/

그냥저냥 만들던거 다른데서 작업하게 올려둡니다. 사실 암것도 작업한건 없지만요.
launcherbrowser