책을 읽었습니다. 5G Network Slicing for 5G and Beyond Networks

국내에 번역서나, 한글서적으로 나와있을지도 모르지만. 일단 구한건 외국원서입니다. Network Slicing for 5G and Beyond Networks. S.M. Ahsan Kazmi, Latif U.Khan, Nguyen H.Tran, Choong Seon Hong, Springer, 2019.
저자중 한분이 홍충선 교수님이시네요. 저자는 경희대 세 분과 러시아 이노폴리스 대학, 시드니 대학으로 구성되어 있습니다. 하드커버이긴한데, 한 손으로 들고 읽기에도 부담 없는 무게의 책입니다. 가격은 요새 원서들이 다 그런지 모르겠지만, 10만원을 넘어서네요. 대학 교재로 쓰던 것도 인터넷 서점에서는 그 가격인 걸 보면, 대학에 싸게 공급하는건지 모르겠네요.. 아니면 요새 정말 원서 값이 그 정도인지.. 그렇다면 대학생들 정말 공부하기 힘들겠네요. 등록금도 비쌀텐데…

그냥 스윽 훑어본 느낌으로는… 논문이네요 –;; 요샌 스펙문서도 거의 이 정도 규모급이긴 하던데, 후딱 읽어보고 같은 부서분께 소감과 함께. 숙제를 넘겨야겠습니다. ^^; 요새 네트웍쪽은 뭔가 새로운 축약 용어들이 난무해서, 그냥 받아들이면 편한데, 따지고 들면 머리가 아파서, 상대하시는 분에 따라서 적절히 넘겨서 혹은 쉬운 용어로 대체해서 설명할 줄 알아야 할 것 같습니다. 그래서 이글에는 책에 나오는 용어 전체이름만 정리해 보도록 하겠습니다. 1/3 정도는 이미 일반인들에게도 익숙한 단어들로 보이는데, 나머지의 반은 기술쪽에 있는 사람도 쉽게 감 못잡을 용어들로 보이네요.

MIMO: Multiple-input and multiple-output
OFDMA : Orthogonal Frequency division Multiplexing Access
METIS : Mobile and wireless communications Enablers for Twenty-twenty(2020) Information Society
URLLC: Ultra-Reliable Low Latency Communications
eMBB : enhanced Mobile BroadBand
mMTC: massive Machine Type Communication
MBB: Mobile BroadBand
HetNets: Heterogeneous Networks : small cells under macro cell (https://www.3gpp.org/technologies/keywords-acronyms/1576-hetnet
D2D : Device to Device, “D2D pair can directly communicate without routing its traffic through the central base station”, p.4
LTE-U : LTE-unlicensed, “Licensed assisted access has been standardized by 3GPP where LTE-U is enabled for downlink communication while the uplink communication and control signaling is performed on the licensed band.”, p.5
SBSs: (low power) Small-cell Base Stations vs traditional Macro cell, aka femto cell, pico cells
MBS : Macro-cell Base Station, Macro Cell and SBS is linked with Fiber backhaul links
LBT: Listen Before Talk
NOMA: Non-Orthogonal Multiple Access, OMA : Orthogonal Multiple Access
WNV : Wireless Network Virtualization
InPs: Infrastructure Providers
MVNO: Mobile Virtual Network Operations
5G usecases : eMBB, URLLC, mMTC, Three anchor.
NFV: Network Function Virtualization
SDR : Software Defined Radio
SDN: Software Defined Networking

Mobile Network 및 5G 개요에 해당하는 Chapter 1 이 지나면(Paper 하나인듯)
Chapter 2 Network Slicing: The concept이 본격 시작됩니다.

여러 응용이라고 표현이 자주 나오는데, 거의 모든 네트워크 시장의 마켓별 분류정도가 됩니다. IOT, 센서네트워크, 통상의 컨슈머 셀룰러, 게이밍, 재난망 등등… 모두 다 몰아넣었네요. 핵심은 NFV가 될것 같습니다. NFV관련해서 거의 바이블처럼 생각되는 페이퍼가 있는데, 여기저기 인용을 하는 간접 페이퍼, Security관련한 페이퍼는 PLoP에 거의 전문으로 하시는 분이 있어서 많이 읽어봤네요. 근간이 되는 Paper도 읽어봐야할 것 같습니다.

MANO : Management And Orchestration
NGMN: Next Generation Mobile Network
Tenant : “Tenant denotes the users that can access the shared resources with specific privileges and access rights”, p.15

2.2 Network Slicing Principles
공통된 물리 네트워크 위의 여러 논리 네트워크들을 생성해서, 여러 마켓 어플리케이션을 서비스 하는 것이라고 되어 있네요. 원칙은 3가지로

Slice Isolation : 성능과 보안을 여러 Tenants들에게 독립적으로 제공해야 한다입니다. fair sharing of the resources라고는 하는데, fair가 참 애매해보입니다.

Elasticity : 자원할당을 자유자재로 변경할 수 있는것을 얘기하네요. 효율성이 주요 키워드겠습니다.

End-to-End Customization : 이것도 효율성인 것 같은데. 앞서서는 자원의 재할당이었다면, 이번에는 utilization에 초점이 있는 듯 합니다. 어렵네요. 미래얘기인 듯 써 놓기도 했습니다.

SDN : Floodlight, Onix, NOX, OpenFlow, kandoo, Huperflow, ONOS 등 뭔가 많네요.
NFV : “uses commodity hardware to run software virtualization techniques for implementation of network functions”, p.18 결국 경제 논리인 듯 합니다.
Cloud-Computing도 얘기가 나옵니다. 기존의 xAAS를 사용자 관점의 분류로 이야기하고 있습니다. 맞는 것 같기도 하네요.
IAAS: Infrastructure as a Service, Network Architects
PAAS: Platform as a Service, Application Developers
SAAS: Software as a Service, End users

Cloud Deployment Models로 다섯가지로 분류하고 있습니다.
Private, Public, Community, Hybrid, Virtual PRivate

Requirements for Cloud Computing in 5G로 패턴에서는 Forces로 SE에서 항상 얘기 되던 것들을 나열합니다. 왠지 친숙하네요

Reliability, Sustainability, Scalability, Fault Tolerance, Security and Privacy

그리고 Edge Computing 얘기가 나옵니다.
“edge computing comes into the picture which leverages pushing of the storage and computing resources to the edge of the network”, p.22
동의어 혹은 분류로 cloudlets, fog computing, mobile edge computing, 각각 Satyanarayanan et al., CISCO, ETSI 에서 밀고 있다고 하네요. 또 각 데이터 센터, 라우터/게이트웨이, 모바일 베이스 스테이션을 위한 개념들이라고 합니다.

Chapter 3 Resource Management for Network Slicing

점차 모바일 기술 용어들이 나타나기 시작합니다.

RAN: Radio Access Network
RAT : Radio Access Technology
CN : Core Network
QoS : Quality of Service
BS : Base Station
sub 6G, over 6G hz 얘기도 나오고요.
5G NR : 5G New Radio
BS에서의 Content Caching얘기도 나오네요. Backhaul 부담 덜어주는 목적으로

3.1.2 Network Slicing 책 제목의 주요 키워드가 드디어 등장합니다.

Application의 예로서 Argumented reality applications : ultra-realiable and low latency, VOD : high throughput, 그리고 Network As A Service용어가 등장합니다.
관련인으로서 다음 문장이 확 와 닿네요
“They do not consider specific algorithmic approaches for slice creation ,slice allocation, slice interactions, admission control, etc.”, p27 … 아몰랑이 생각납니다. –;;
2015, 2016년에 걸쳐서, SKT, Ericsson, NTT DoCoMo, Huawei, Deutsche Telekom, ZTE, Chnia Mobile 들이 뭔가 될거라고 보여줬다고 합니다…. 하아… 2020년인데….
SDN, Virtualiation, NVF는 발전이 많았는데, RAN Slicing은 아직 미비하다고 하네요. 아마 이 책에서 얘기할 듯 합니다.
3.2 RAN Resources : 중요한 세가지 종류로, Radio Resource, Cache Resources, MEC Resource를 꼽고 있습니다.

Radio Resource: 는 주로 실제 Radio Sepectrum을 어떻게 할것인가에 대한 이야기를 하고 있습니다.

mmWave : Milimeter wave
MINLP: mixed-integer nonlinear programming, 리소스 할당의 최적화 이야기에서 나오는 얘기네요. 두가지 주요 알고리즘중 하나이고, 다른 하나는 QoS based radio resource management라고 합니다.
two-tier HetNet에서의 Resource Allocation에서의 문제가 mixed-integer resource allocation problem이란게 있다고 합니다. 이걸 duality-based혹은 matching theory로 해결한다고 합니다. 현재는.

알고리즘에서 고려하는 중요한 요소로 power가 얘기되고 있네요.

Caching으로 넘어가서, cache enabled C-RAN, cache enabled macro cellular networks, cache enabled D2D networks, cache enabled HetNets라고 네가지로 분류하여 설명하고 있습니다. 그리고 Machine learning에서 많이 듣건, Global Optimal Solution얘기하고, Decentralized algorithm, Centralized Algorithm 얘기가 적혀 있네요… NP-complete까지… near-optimal로 Dynamic Programming에,
SNM : Short Noise model 등등.. 알고리즘 용어 대잔치로 보입니다. Cache라는 주제로 다른 페이퍼 한뭉치는 나올 것 같네요.. 에휴.. 많다… Yang et al. 저자를 찾아봐야할듯 합니다.

Edge Computing Servers에서는 아까의 용어들 잔치와, offloading이라는 단어가 눈에 띄입니다.

3.3 Use Case들이 등작합니다. 각각에 대해서 수학적인 모델수식이 등장하기 시작하네요. 빨리 넘겨야겠습니다. 첫번째는 “Virtual Reality” 이네요. 계산식은 제법 단순한, Size, 즉 데이터 총량의 추정을 합니다. 이걸로 Learning알고리즘 돌리려나보네요.. 많이 보던 수식 패턴이 보입니다.

ADMM: Alternating Direction Method of Multipliers, 일반적인건지 저자가 제시하는 건지 모르겠는데. 주요 솔루션의 접근 기법이라고 합니다. 목적은 Task Offloading을 결정하기 위한것이라고 하네요.
PPP: Poisson Point Process, PPP가 이런 뜻으로도 되는군요 –;
암튼 그래프 제시와 함께 성능은 기존에 비해서 좋다고 합니다. 전형적인 페이퍼의 결론이되겠습니다. 다른 Use Case가 더 나올 줄 알았는데. 아니군요…. 하아… Reference는 43개나 되네요.. 고생 좀 했겠습니다.

Chapter 4 Network Slicing: Radio Resource Allocation

챕터 3이 Network Slicing이었는데. 이번엔 뭔가 부제가 더 붙었네요.

WNV: Wireless Network Virtualization, “These resources are then isolated to a number of virtual resources(slices)” , p.43, 가상화리소스가 거의 Slice와 동일개념으로 쓰이는 느낌입니다. “main goal is to assign slices to different mobile virtual network operators(MVNOs) such that the network utility is maximized”, p.43 제법 경제적인 논리로 설득력 있는 문장입니다. 동의합니다. 돈벌어야죠, 최대한 많이.

Radio Resource Allocation with Single InP : InP에서의 MVNO사업이 주요 골자이겠습니다. 망 대여하고 돈 버는 것.

InPs: Infrastructure Providers
RB : Resource Block
SLA: Service Level Aggrements
VR : Virtual Resource, 또 다른 VR입니다.
여기서는 수학 모델링에서, Bandwidth와 Power를 주요 계산요소로 따지고 있네요. 해결 알고리즘으로는 Matching Theory를 쓰고 있습니다.

아마 이론에서 나오는 용어들과 그 순서대로 문제를 풀어가고 있는것 같은데.
Matching Game: Preference Profile 이라는 개념이 있는 듯 합니다.
알고리즘 설명후 시뮬레이션 파트에서는 그림으로 Base Station에서 처리할 VNO user들을 점으로 표현한 걸 보니. 감이 어느정도 옵니다. 일단 골라서 서비스하면, 빼는식으로 계속 가다가 마지막에 자르기…

Radio Resource Allocation with Multi-InP : MNO+MVNO에서 여러 유저들을 할당하는 문제 같습니다. Base Station은 하나이고, Network Slice가 갖는 속성이 다를것으로 가정하여, 이게 본게임이 되겠네요. 거기에 MVNO들도 여럿이 될수도 있다고 하니, 난장판이겠네요. Fig 4.5는 Fig 1.5와 같은건데. 여기서 의미가 명확해지네요.

two-sided matching games을 쓰면 된다고 합니다. low-level game, high-level game으로 구분해서 단계적으로 차등으로 처리하나 보네요. 그래서 나오는게, Hierarchical Matching(HM) Game Algorithm이라고 합니다.
Stage 1: Low-Level Matching – Service Selection
Stage 2: High-Level Matching – Resource Purchasing
결과가 할당된 그룹이 나온다고 하네요.
단점은 Stage1이 고정되지 않으면 Stage2에도 영향을 주는 점이라고 합니다. 다음 논문주제가 되겠군요.
여기서의 Slice는 RAN Slice, Bandwidth 분할 할당 이야기이네요. 네 그랬었죠. Radio Resource Allocation

Chapter 5 Network Slicing: Radio Resource Allocation Using Non-orthogonal Multiple Access
네.. 챕터 제목이 점점 길어집니다 –;;

SIC: Successive Interference Cancellation
MBS: Macro Base Station

Fig 5.1 이 나오는데, Frequency-Time domain관련 Resource Block이 등장합니다. Slice간의 clustering 얘기가 나올 듯 합니다.

Matching Game for User clustering(NOMA clustering)

Matching Game with Externalities for User Clustering

Gale-Shapley style algorithm 등등 많이도 나오네요. 요건 적용안되서, blocking pair라는 개념이 쓰인다고 합니다.

Arithmetic-Geometric Mean Approximation
SCA: Succesive Convex Approxmiation, 아.. 알고리즘시간에 들었던 것 같은데…
JUCRAN: Joint User Clustering and Resource Allocation in NOMA. 아. 뭔가 억지스럽다…
KKT: Karush-Kuhn-Tucker 조건을 만족한다고합니다.. Centralized SCA-Based Power Assignment with AGM Appromixation이…

이 다음은 JUCRA 2 3으로 이어지는 Simulation결과로 끝날것 같네요.

Chapter 6 Network Slicing: Cache and Backhaul Resource Allocation

끝나지 않는군요. Network Slicing이란건…
“This work mainly dealt with the network virtualization targeting the uplink of a cellular network” p.91 라고 합니다. 핵심 그림은 Fig 6.1

풀어나가는 중에 나오는 알고리즘들, Hungarian Algorith, Distributed Algorithm(JSPA-HSA) HSA가 Hungarian-based Slice Allocation. JSPA는 Joint Slice and Power Allocation
MSA: Matching based Slice Allocation algorithm –;
BS: Bandwidth Slicing, 약어 힘드네요..

JP-ADMM: Jacobi-proximal alternating direction method of multipliers가 Decentralized 라고 합니다. PBCD보다 좋다고 합니다.. Proximal Block Coordinate Descent 흠.. general multi-convex 문제를 푸는데 쓰인다고 하네요.

Chapter 7 Network Slicing: Dynamic Isolation Provisioning and Energy Efficiency

이제 에너지가 등장했습니다. 통일은 없는걸까요? –;

NLS: Non-cooperative Leasing Game
Lyapunov Online Algorithm을 이용한다고 합니다.
CSI: Channel State Information
QSI: Queue State information
근데 수식은 많이 보던 Cost functoin형태이네요

Stackelberg Game and Stackelberg Equilibrium

Chapter 8 Concluding Remarks 마지막입니다. 오예.

오픈 이슈
1.Dynamic Slice allocation : 이 책에서 안 다룸. 실제 시스템과는 거리가 있음. –;;
2.Mobility Aware Network slicing: 다른 Station으로 도망간다면, Inter-InP

세줄 요약
1. RAN Slicing에 대하여 다루었음.
2. 여러 가지 알고리즘으로 RAN의 주요 요소와 속성들을 고려하여 문제들을 풀었음
3. 실험환경 내에서의 결과 한정으로 할것 많음.

소감
UE를 주로 다루는 제 입장에서는 MNO(InP)가 MVNO를 고려해서 Network Slice를 만들어 내고 있다라고 밖에는 안 느껴지네요… 돈때문에.
책 번역본은 절대 안 나올 듯 합니다. 논문집이라…

오늘은 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환경으로만 가도 윈도우상의 어플리케이션도 이런 문제들에 봉착하는 경우가 다분히 많으므로, 브라우저의 문서표현형식으로 확인하고 진행하는 형태도 나름 나쁘지는 않을 것 같습니다.