오늘은 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

OpenGrok설치기

요즘 한창 벼르던 OpenGrok을 조금씩 조금씩 설치해보고 있습니다. 국내 블로그에는 대부분 예전 버전의 설치방법과 기본 설치 디렉토리를 사용하는 방법으로 되어 있어서, 최신 1.3.7버전과는 일부 파일명, Configuration 설정 등의 차이로 인해서 바로 따라하기가 쉽지는 않습니다. 다행인지 불행인지, ubuntu snap설치도 가능하긴 한데, tomcat이 뜨는 것까지는 볼 수 있지만, opengrok의 설정에서 또 막히고, 어디 문서도 찾기 힘든터라 오히려 공식 opengrok사이트의 설치방법을 따라가고 있습니다. 현재까지의 경과는 일단
1. tomcat8, ctag를 설치하고,
2. opengrok소스를 받아서 tomcat에 deploy해서 webapp작동을 시킨 뒤,
3. opengrok의 indexing을 통해서 configuration을 다시 잡아 source/data를 설정하고,
4. 웹인터페이스로 결과를 확인하는게 된다 인데요..
현재는 2번에서 막혔습니다 –;;; 오히려 snap으로 설치된 것 보다 진행이 더딘데, tomcat의 webapp 쪽으로 permission설정 문제에서 멈춰 있습니다. 공식 설치가이드에서는, 그냥 잘 설정하라고만 되어 있네요…. 에휴..

이러는 와중에, 데스크탑에서 설치하기 힘들고, 잠자리에서도 해볼만한게 없나 싶어, 크롬북에서 설치시도를 해보고 있는데, 여기서는 또 난데 없는 apt 에러를 보네요. opengrok하고는 상관없지만, 최근의 업데이트 관련 발생한 문제 같은데, gpg키를 구글에서 갱신을 안해서 그렇다고 합니다. 해결 방법은 아래글에서처럼 key 갱신을 하는 방법이 있네요.
https://support.google.com/chromebook/thread/26548757?hl=en

아래의 에러가 보이면
Reading package lists… Done
W: GPG error: https://storage.googleapis.com/cros-packages/79 stretch Release: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 78BD65473CB3BD13
E: The repository ‘https://storage.googleapis.com/cros-packages/79 stretch Release’ is not signed.
N: Updating from such a repository can’t be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

아래를 하면
jiwonuskim@penguin:~$ sudo apt-key adv –refresh-keys –keyserver keyserver.ubuntu.com

뭔가 많이 갱신하고

gpg: key A040830F7FAC5991: 20 duplicate signatures removed
gpg: key A040830F7FAC5991: 46 signatures not checked due to missing keys
gpg: key A040830F7FAC5991: “Google, Inc. Linux Package Signing Key ” 57 new signatures
gpg: Total number processed: 12
gpg: new subkeys: 1
gpg: new signatures: 125

문제없이 잘됩니다.
jiwonuskim@penguin:~$ sudo apt update
Ign:1 https://deb.debian.org/debian stretch InRelease
Hit:2 https://deb.debian.org/debian-security stretch/updates InRelease
Hit:3 https://deb.debian.org/debian stretch-backports InRelease
Hit:4 https://deb.debian.org/debian stretch Release
Ign:5 https://storage.googleapis.com/cros-packages/79 stretch InRelease
Get:6 https://storage.googleapis.com/cros-packages/79 stretch Release [3,114 B]
Get:8 https://storage.googleapis.com/cros-packages/79 stretch Release.gpg [819 B]
Hit:9 https://apt.llvm.org/stretch llvm-toolchain-stretch-7 InRelease
Get:10 https://storage.googleapis.com/cros-packages/79 stretch/main amd64 Packages [13.2 kB]
Fetched 17.1 kB in 3s (5,229 B/s)
Reading package lists… Done
Building dependency tree
Reading state information… Done
11 packages can be upgraded. Run ‘apt list –upgradable’ to see them.

UM2 GAN 65W 고속PD충전기

일전에 5포트짜리 충전기를 사서 잘 쓰고 있습니다만, 최근에, 휴대용 충전기가 새로 나왔다고 해서 사보았습니다.
기존의 5포트짜리가 집에 놓고 쓰기에는 좋지만, 어디 움직이거나 할때는 크기 때문에 부담이 되었고
무엇보다 지난번 중국에서 사온 샤오미북 프로를 쓸때 돼지코 때문에 참 힘들었기 때문에, 목적은 샤오미북 충전만으로 족했습니다.
가격은 3만원 후반대여서 1포트짜리 치고는 약간 비싼 느낌은 있지만. 불편함을 줄여줄 수 있다면 그걸로 만족하기로 헸습니다.
결론은, 노트북 충전 잘 된다 입니다.
사진은 아래에 있듯이, 기존 샤오미노트북용 보다 전체적으로 작지만, 플러그쪽이 좀 튀어나와서 약간 좀 아쉽습니다. 접거라 분리형식이었다면 좋았을텐데요.
일반 휴대폰 충전기 두개적도의 크기로 보면 됩니다.

아이디어노트 : Jupyter Notebook형식을 이용한 즉시 환경 구성 InteractiveGuide 시스템

현재 Android Test Station을 설치하고 있고, 동시에 Python으로 자동화 스크립트를 만들면서 불현듯 떠오른 아이디어입니다. 한쪽에는 쉘을 열어두고, 스크립트를 만드는데, 대부분의 내용은 이미 설명이 나와있는 웹페이지에서 커맨드들을 발췌해서 넣고 있습니다. 가만히 생각해보니, DeepLearning등에서 유용하게 사용했던 Juptyer Notebook에서 강의자료의 설명들을 보고, Python Command들을 바로바로쳐서 결과를 보고 한게 떠올랐습니다. 어차피 무엇인가 설명을 얻기 위해서는 텍스트가 필요하고, 대부분은 웹에 보기 좋게 정렬되어 있고, 시스템 설치 명령어들이 예제처럼 들어 있습니다. 그걸 그냥 바로 내 시스템에서 실행할 수 있도록 하면 어떨까요? 한줄 한줄 따라가면서 실행하고, 결과도 보여주면서, 설치가 어느정도 진행되었는지 확인도 하고, 바로 Trouble Shooting등으로 선택지등을 골라서 페이지를 넘기는 식으로 한다면 편리하지 않을까요? 물론 보안상 위험하긴 할겁니다. 하지만 모든 주도권을 해당 가이드 페이지에 접속한 사용자가 가지게 된다면, 그리 썩 위험해보이지는 않아보입니다.

현재도 대개는 예제 커맨드들을 바로 복사해서 쉘에서 바로 실행할 수 있는 형태로 무가공으로 할 수 있게 해주고 있으니, 실행후의 Interaction과 여러 명령어들의 순차적인 확인등이 되겠습니다. 대개 훌륭하고 미려한 어플리케이션 Installer들이 많고, 이와 유사하나, 오픈소스들 특히나, 리눅스 계통은 브라우저에서 설명 문서들이 있고, 쉘에서 직접하는것들이 많으니까요. 인스톨 패키지를 만든다면 더 없이 좋겠지만. 환경 설정이 들어가는 부분에서는 여러가지 변수가 많다보니 하기 힘든것도 사실입니다. 윈도우는 버전별이나 여러 환경이 거의 100%통제가 되는 상황이니 대개 Installer정도로 가능하지만, Java환경으로만 가도 윈도우상의 어플리케이션도 이런 문제들에 봉착하는 경우가 다분히 많으므로, 브라우저의 문서표현형식으로 확인하고 진행하는 형태도 나름 나쁘지는 않을 것 같습니다.

Android Test Station설치기(~ing)

업무상 Android Test Suite들인 CTS, VTS, GTS등을 실행할 일이 생깁니다. 이번 Q버전출시와 함께 구글에서 새로운 Android Test Station이라는 Web UI형식의 ‘편리한’!? 툴을 오픈소스로 공개했습니다. 하지만 설치 작업이 마냥 편리하지만 않네요. 기본적으로 Docker와 Google Cloud에 의존성이 있는 터라서, 방화벽등의 Proxy뒤쪽의 환경에서 설치하는 것은 매우 곤욕입니다. 이번에 저도 그러한 고통의 시간을 겪다가, 도저히 평범한 환경에서는 어찌 되나 싶어 집에서 설치를 해보고 있는데요. 그마저도 역시 개발자스러운 설치 절차를 통과해야하기 때문에, 성격상, 귀찮아서, 스크립트 짜고 있습니다.

일단 사이트는 아래이고요.
https://source.android.com/compatibility/tests/development/android-test-station

스크립트는 아래에 업데이트 중입니다. 요새는 연습삼아 파이썬 스크립트로 Bash쉘스크립트를 다 바꾸고 있는 터이고, 인터넷 여기저기서 긁어모은것은 나중에 쓰기 편하게 덕지덕지 붙여가면서 만들고 있는 터라 좀 지저분하긴 하지만, 나름 다시 찾기 시간 아깝고, 나중에 다른 시스템에 다시 설치시에 참고하기도 좋아서 하고 있습니다. 물론 Docker와 Google Cloud가 제대로 환경이 갖추어 진다면, 다음부터는 위 두가지 플랫폼으로 여기저기 환경 옮기기에는 좋겠지요. 네, 그마저도 귀찮은 겁니다. ;). 아근데 저번에는 파일 첨부가 워드프레스 UI상에서 바로 되도록 쉬웠던것 같은데, 업그레이드 되면서 뭔가… 또 어렵네요.. 다음에 올려야겠습니다. 미디어 항목에서 따로 올려야했건전지, 라이브러리로 업로드를 따로 하니 되는것 같습니다. 근데 ‘링크복사하기’ 메뉴가 제대로 동작은 안하나보네요. 흐음.. 첨부 버튼에서 검색으로 일반 파일명도 검색해서 링크로 찾아주면 좋은데, 왠지 있을 것 같은 Plugin인데, 그것도 한번 찾아봐야겠네요.
https://onecoinsoft.co.kr/wp-content/uploads/2020/01/install_docker.zip

Docker와 Google Cloud를 모두 설치하고 초기화를 하고 나면, 본격적으로 실행을 시켜보게되는데요. 명령어는 mtt입니다.. 왜 mtt인지는 잘 모르겠습니다. 그런데 초반에 실행해보면. 멍대리고 있는 것처럼 보이게 되는데, 이유인즉슨 android-mtt/mtt에서 pulling/Download중인 것을 따로 화면로그로는 출력안하고, 대기한다는 문구도 없이 그냥 파일로만 출력하며 진행하고 있어서입니다. 인내심이 뛰어나신분들은 그냥 기다리시면 되겠고요. 아니면 저처럼 왜이래 하고 못 참으시는 분은 아래처럼 첫 실행에는 verbose옵션을 주거나 stderr로 출력시켜서 보는것이 더 낫겠습니다.

(base) jiwon@jiwon-u16:~$ ./mtt –logtostderr -v start
WARNING:root:config file does not exist: /home/jiwon/.config/mtt/mtt.ini
2020-01-07 22:02:39,689 |DEBUG| cli:619| Command auto update enabled, but there is no cli_update_url set. Using the default: gs://android-mtt.appspot.com/prod/mtt.
2020-01-07 22:02:39,697 |DEBUG| command_util:137| stdout: /home/jiwon/google-cloud-sdk/bin/gcloud
2020-01-07 22:02:39,708 |DEBUG| google_auth_util:61| Get credential from gcloud auth print-access-token.
2020-01-07 22:02:40,446 |DEBUG| command_util:137| stdout: ya29.Ima4B2bnfClxgZM2TG4iyGB8yBUsjIBKZQCqri6ucXC3rT9WvHiUevCrAt_U48-9QHK7FNh34tXRua13gtZz4d5NnkRPzDXuDX38tfeGgEhnNpIY3t4VioFN_x3e-XuxhC_Riuujg8k
2020-01-07 22:02:41,036 |WARNING| cli:635| No access to android-mtt.appspot.com.
2020-01-07 22:02:41,036 |DEBUG| host_util:116| No lab config path set.
2020-01-07 22:02:41,038 |INFO| cli:193| Using image gcr.io/android-mtt/mtt:prod.
2020-01-07 22:02:41,103 |DEBUG| command_util:137| stdout: Docker version 19.03.5, build 633a0ea838
2020-01-07 22:02:41,120 |DEBUG| command_util:137| stdout: /home/jiwon/google-cloud-sdk/bin/gcloud
2020-01-07 22:02:41,498 |DEBUG| command_util:137| stderr: gcloud credential helpers already registered correctly.
2020-01-07 22:02:41,557 |INFO| command_util:444| gcloud auth configure-docker
2020-01-07 22:02:41,650 |DEBUG| command_util:137| stdout:
2020-01-07 22:02:41,650 |DEBUG| command_util:137| stderr: Error: No such object: mtt
2020-01-07 22:02:41,667 |DEBUG| command_util:693| No container mtt.
2020-01-07 22:02:41,667 |INFO| cli:209| mtt_master_url is not set; starting a standalone node.
2020-01-07 22:02:41,733 |DEBUG| command_util:137| stderr: Error: No such volume: mtt-temp
2020-01-07 22:02:41,822 |DEBUG| command_util:137| stderr: Error: No such container: mtt
2020-01-07 22:02:41,913 |DEBUG| command_util:137| stderr: Unable to find image ‘gcr.io/android-mtt/mtt:prod’ locally
2020-01-07 22:02:43,618 |DEBUG| command_util:137| stderr: prod: Pulling from android-mtt/mtt
2020-01-07 22:02:43,619 |DEBUG| command_util:137| stderr: 3386e6af03b0: Pulling fs layer
2020-01-07 22:02:43,619 |DEBUG| command_util:137| stderr: 49ac0bbe6c8e: Pulling fs layer
2020-01-07 22:02:43,620 |DEBUG| command_util:137| stderr: d1983a67e104: Pulling fs layer

한참을 download하고 난뒤에, 아래줄까지 출력이 되고 나서야 비로소 로컬에 시스템이 구동되기 시작합니다.

2020-01-07 22:05:53,663 |INFO| cli:299| MTT is serving at http://localhost:8000