• 이전 블로그에서 정리했던 내용인데, 윈도우를 포맷한 후 새로 테스트 해본 결과 정리. 별다른 차이 없이 잘됨.


    덧#1: 현재 원인은 잘 모르겠는데, 아래와 같이 브릿지로 설정을 해놓으면, 인터넷 업로드 속도 및 노션 등 클라우드 서비스의 속도가 미친듯이 느려지는 상황이 발생합니다. 구글링 해보니, 같은 증상을 호소하는 사람이 다수있네요. 버그인듯한데… 방법을 찾아봐야겠습니다.


    WLS2의 서브 머신들의 네트워크는 내부 프라이빗망을 사용한다. 외부 대역과는 분리되어 있다는 의미로, 예를 들어 Ubuntu를 설치하고 ifconfig를 실행해보면,

    $ ifconfig
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.21.50.26  netmask 255.255.240.0  broadcast 172.21.63.255
            inet6 fe80::215:5dff:fec8:7eef  prefixlen 64  scopeid 0x20<link>
            ether 00:15:5d:c8:7e:ef  txqueuelen 1000  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 7  bytes 586 (586.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    와 같이 172.21.50.xx 대역의 아이피를 자동으로 할당받는다.

    사용 목적에 따라 현재 사용하는 윈도우 머신의 네트워크를 브릿지하여 외부에서도 접속이 가능할 수 있게끔 할 필요가 있는데, 이를 사용하려면 WSL2의 Bridge 기능을 사용하면 된다.

    먼저 윈도우 추가 기능 중 Hyper-V 기능을 활성화한다.

    설치를 완료하고, 재부팅.

    Hyper-V Manager를 실행한다.

    메뉴 > Action > Virtual Switch Manager를 실행한다.

    우측 Create virtual switch에서 External를 선택하고, Create Virtual Switch버튼을 누른다.

    이름을 적당히 입력하고 (여기선 wsl2-external), Connection type에서는 External network에서 외부망과 연결할 Network 카드를 선택한다. 현재 테스트 환경은 노트북이라 여기에선 노트북의 WiFi 카드를 선택함.

    네트워크 설정 과정에서 현재 연결 상태를 변경할 수 도 있다는 경고인데, 그냥 Yes를 눌러 진행한다.

    이제 Hyper-V Manager를 종료하고, 사용자 홈 디렉토리 (C:\User\<user-name>\)에 .wslconfig 파일을 생성하고 다음과 같이 입력한다.

    [WSL2]
    networkingMode = bridged
    vmSwitch = wsl2-external

    networkingMode를 bridged로 설정하고, vmSwitch에는 전 과정에서 생성한 Virtual Switch 이름을 입력한다.

    코맨드 창을 열고, wsl2를 완전히 종료한다.

    > C:\Windows\System32\wsl.exe --shutdown

    이제 wsl2의 서브 머신, 예를 들면 Ubuntu를 시작해서 ifconfig 명령어를 실행해보면,

    $ ifconfig
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.1.237  netmask 255.255.255.0  broadcast 192.168.1.255
            ether 5c:bb:f6:9e:ee:fa  txqueuelen 1000  (Ethernet)
            RX packets 17  bytes 2506 (2.5 KB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 2  bytes 684 (684.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    와 같이 외부망의 IP를 할당받아 사용되는 것을 볼 수 있다.

    외부에서 접속도 가능하고, 외부로 나가는 트래픽도 문제가 없음.

  • 참고림크: https://docs.nvidia.com/cuda/wsl-user-guide/index.html

    WSL2로 설치한 Ubuntu에서 CUDA를 설치하면 GPU 가속에 관련한 개발을 진행 할 수 있다.

    물론 윈도우에서 NVIDIA 드라이버 설치가 완료되어 있어야 함. https://www.nvidia.com/Download/index.aspx. 설치방법은 위 링크를 참고. 권장된 방법대로 WSL-Ubuntu 패키지를 이용한 설치 방법을 사용한다. Ubuntu를 실행한 후 다음과 같이 입력한다.

    $ wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.0-1_all.deb
    $ sudo dpkg -i cuda-keyring_1.0-1_all.deb
    $ sudo apt-get -y install cuda

    설치가 완료되면, 확인.

    완료.

  • 참고링크: https://learn.microsoft.com/ko-kr/windows/wsl/install

    현재 개발환경: Windows 11 Pro 22H2

    설치를 진행하기 위해 커맨드 창을 관리자 권한으로 실행한다.

    > wsl --install

    자동으로 설치가 진행되고, 다음과 같이 Ubuntu 22.04까지 설치가 완료됨.

    > wsl --install                                                                                       Installing: Virtual Machine Platform                                                                                    Virtual Machine Platform has been installed.                                                                            Installing: Windows Subsystem for Linux                                                                                 Windows Subsystem for Linux has been installed.                                                                         Installing: Ubuntu                                                                                                      Ubuntu has been installed.                                                                                              The requested operation is successful. Changes will not be effective until the system is rebooted.                                                                                                                        

    재부팅 필요.

    시작메뉴에서 Ubuntu 확인 가능. 추가로 다른 버전의 Linux를 설치하고 싶다면, Microsoft Store를 통해서 설치 진행한다.

    처음 실행 시, 사용자 이름과 암호를 입력하고 나면 Ubuntu가 정상적으로 실행됨을 볼 수 있다.

    이제 기본 Ubuntu와 동일하게 사용 가능.

    기본적으로 wsl2로 설치가 진행된다고 함. (예전엔 wsl1으로 되었는데…) 확인은 다음과 같이 입력하면 됨.

    > wsl -l -v
      NAME      STATE           VERSION
    * Ubuntu    Running         2

    완료

  • ROS를 사용하여 개발을 하다보니, ROS의 버전 파편화 덕분(?)에 Ubuntu의 버전을 달리 사용해야 하는 경우가 발생합니다. 현재 ROS2의 최신 LTS 버전은 Humble로 Ubuntu 22.04에서 사용이 가능합니다. ROS1의 경우 최종 LTS 버전이 Noetic으로 Ubuntu 20.04에서 사용이 가능합니다. 따라서 이 두개의 버전을 사용하기 위해선 두 개의 Ubuntu 버전을 사용해야 합니다.

    도커를 사용하는 방법이 있으나, 개발 시에 불편한 점이 있기도 하고 사용자에게 교육 시 일반화 하기엔 무리가 좀 따릅니다. 또 외장 USB 혹은 SSD를 이용하는 방법도 있지만, 주렁주렁 매달고 다니기엔 좀 불편하죠.

    하나의 디스크에 루트 파티션만 분리하면, 여러가지 버전의 Ubuntu를 사용할 수 있습니다.

    먼저 가장 최신 버전의 Ubuntu 배포판을 설치합니다. 물론 윈도우와 멀티부팅하는 경우도 포함합니다.

    설치 과정에서 디스크 파티션을 설정하는 부분이 있는데, 이때 나중에 설치할 배포판의 루트 영역도 확보해둡니다. 예를 들자면 다음과 같이 구성합니다.

    /dev/sda1    /boot    EFI     2000MB
    /dev/sda2    /        ext4    200000MB
    /dev/sda3    None     ext4    200000MB
    /dev/sda4    swap     swap    32768MB

    장치번호는 사용자마 다를 수 있으니 감안하시고, 구성된 것을 보면, 루트 파티션(/)만 분리해 둔 것을 볼 수 있습니다. 이제 설치과정을 진행하여 정상적으로 완료하도록 합니다.

    다음으로,

    추가로 설치할 배포판 설치를 진행합니다. 이때는 기존의 설치방법이 아닌, Try Ubuntu 등 임시로 사용할 수 있는 모드로 부팅을 완료한 후, 터미널을 실행하여 다음과 같이 입력합니다.

    $ ubiquity -b

    위 명령은 설치 진행 시 부트로더 설치를 하지 않겠다는 의미입니다. 설치과정은 기존과 동일하고, 다만 파티션 설정 부분에서 기존에 확보해두었던 파티션을 루트 파티션으로 선택합니다. (위와 같은 구성의 경우 /dev/sda3)

    이제 전 과정에서 설치한 최신 배포판으로 부팅한 후,

    $ sudo update-grub2

    을 입력하면, 자동으로 grub에서 모든 파티션의 루트 파티션을 인식해서 부팅목록에 추가해 줍니다.

    Grub의 기본 설정이 별다른 입력이 없으면, 휙 그냥 지나가게 되어 있어, /etc/default/grub 파일을 열어 다음과 같이 수정해준다.

    # If you change this file, run 'update-grub' afterwards to update
    # /boot/grub/grub.cfg.
    # For full documentation of the options in this file, see:
    #   info -f grub -n 'Simple configuration'
    
    GRUB_DEFAULT=0
    GRUB_TIMEOUT_STYLE=menu
    GRUB_TIMEOUT=10
    GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    GRUB_CMDLINE_LINUX=""

    다시,

    $ sudo update-grub2

    해주고, 재부팅하면 정상적으로 grub 창이 뜨고, 부팅할 곳을 선택할 수 있음.

  • 윈도우11로 판올림하여 사용하면서 불편한 부분이 바탕화면에서 오른쪽 버튼을 눌렀을 때, 기존 메뉴가 다 나타나는게 아니고 항상 “더 많은 옵션”을 눌러야만 보이는 점입니다.

    이를 비활성화 하기 위해선,

    CMD창을 관리자 권한으로 실행하고, 다음과 같이 입력합니다.

    > reg.exe add “HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32” /f /ve

    그런 다음, explorer.exe를 강제 종료합니다.

    > taskkill /f /im explorer.exe

    다시 explorer.exe를 실행해 줍니다.

    > explorer.exe

    이제 확인해보면, 더 많은 옵션 메뉴가 사라지고 모든 메뉴가 잘 보이는 것을 확인할 수 있습니다.


    다시 이전으로 복구하려면,

    > reg.exe delete “HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}” /f
    > taskkill /f /im explorer.exe
    > explorer
  • 아주 간만에 윈도우를 새로 설치해야 할 일이 생겼습니다. 듀얼부팅으로 사용하던 리눅스에서 USB 메모리를 지운다고 했던 것이 윈도우 파티션을 아주 깔끔하게 지워버리는 사고를 치는 바람에… 복구 USB 스틱을 만들고, 윈도우 설치를 진행하는 도중에 아무 생각없이 live 계정과 연결하도록 하였는데, 이게 자꾸 이상하게 꼬이는 현상을 보입니다.

    기존 User 홈 폴더에 Desktop / Documents / Downloads / Videos / Pictures 등이 생성되고 여기에 자료가 모아지는 형태였는데, 라이브 계정과 연동하면 기본으로 이 유저 폴더가 원드라이브와 링크되어 사용됩니다. 그래서 심볼릭 링크 형태로 Desktop 폴더가 물리적으로는 C:\Users\<user-id>\Desktop 으로 연결됩니다.

    웃긴 점은 원드라이브를 지우면 이 링크가 복원되나 했더니, 그것도 아니었습니다. 여전히 Desktop 디렉토리는 OneDrive 하위에 위치해 있게 됩니다. 잘못해서 지우면 탐색기를 실행할 때마다 에러를 뿜고, 지 맘대로 복구해버립니다.

    예전에는 설치 과정에서 로컬 계정을 사용할 수 있도록 여지를 주었지만, 얼마전부터인가 무조건 라이브 계정을 사용해야하고 원드라이브 사용을 강제하고 있습니다. 이를 회피하려면, 설치 시 네트웍 연결 과정에서 Shift + F10 키를 눌러 CMD창을 실행하고 oobe\bypaddnro를 입력합니다. 그렇게 되면 다시 재부팅되고 다음부터는 인터넷 연결 없이 로컬 계정 설치를 진행할 수 있습니다.

    그렇게 되면 깔끔하게, 이전처럼 User 홈 디렉토리 밑에 위 사용자 폴더가 정상적으로 위치해 있는 것을 확인할 수 있습니다. 원라이브와의 싱크도 하지 않습니다.

  • 스팀덱 구입은 거의 한달 전이었는데, 사 놓고 한 두번 켜본 다음 방치 수준이었습니다. 가장 용량이 작은 64GB 모델을 구입했고, 어짜피 SSD를 교체하려고 마음 먹은지라, SSD가 오기 전까지는 별다른 할 일이 없어서…

    교체 난이도는 너무나 낮습니다. 몇개 나사 풀고, 그냥 교체하면 끝인거라, 10분 정도 걸린듯 하네요.

    구매했던 1TB SSD가 도착을 했고, 교체 방법까지 상세히 적혀져 있는 웹페이지를 참고하여 교체 성공.

    https://www.ifixit.com/Guide/Steam+Deck+SSD+Replacement/148989

    다음으로, 복구 이미지를 이용하여 복구까지 완료하였습니다.

    https://help.steampowered.com/en/faqs/view/1b71-edf2-eb6d-2bb3

    이제, 구입할 때 계획했던대로, 로봇의 원격제어를 위한 우분투 설치 or 게임 약간 (^^;;)을 해봐야겠습니다.

  • Cockpit은 웹 기반의 리눅스 서버 GUI 도구 플랫폼입니다. 보통 ssh로 접속하여, 이것저것 터미널 명령어를 이용해서 설정 및 사용도 가능하지만, Cockpit을 사용하면 웹 기반의 GUI 환경에서 작업이 가능합니다.

    https://cockpit-project.org/

    설치도 매우 간단합니다. Ubuntu에서도 쉽게 apt를 이용해서 설치가 가능합니다.

    $ sudo apt install cockpit

    실행은 따로 할 필요없이, 자동으로 서비스로 등록되어 부팅 후에 자동 실행됩니다. 기본포트는 9090으로 설치후 https://localhost:9090으로 접속하면 다음과 같은 화면을 보실 수 있습니다.

    크롬 등 브라우져에서 비보안접속 경고가 떠도 일단은 그냥 접속진행하셔도 무방합니다. 로그인은 현재 PC의 사용자 계정으로 접속하면 됩니다.

    이제 좌측 메뉴에서 기본적으로 제공되는 정보를 이용해 PC 모니터링이 가능합니다. 터미널 실행도 가능합니다.

    좌측의 도구는 사용자가 직접 개발하여 추가도 가능합니다.

    사실 Cockpit에 관심을 가지게 된 이유가, 로봇의 파라미터 설정, 모니터링 및 유지보수가 목적이었는데, 사용자 도구를 이용하여, ROS의 rviz 등을 표시해서 간단한 제어 및 모니터링 기능을 추가해보는 것도 괜찮을듯 합니다.

  • 카카오톡을 좋아하진 않지만, 몇몇개의 오픈 채팅방과 타기관과의 협업에 소통 창구로 카카오톡이 쓰이는 관계로 메세지를 확인하는 편입니다. 아이폰만으로 대응하기엔 살짝 피곤한 부분이 있어, Ubuntu에서 설치할 방법을 찾아보다가, Wine을 사용하면 된다고 하여, 설치를 해봅니다.

    먼저 Wine을 설치합니다. 현재 최신 버전은 8.0이며, 다음과 같은 과정으로 설치가 가능합니다.

    [v] Wine Repository 키 등록 및 Repository를 apt 소스 리스트에 추가

    $ sudo wget -O - https://dl.winehq.org/wine-builds/winehq.key | gpg --dearmor | sudo tee /etc/apt/keyrings/winehq-archive.key
    $ sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/$(lsb_release -sc)/winehq-$(lsb_release -sc).sources

    [v] 설치

    $ sudo apt update
    $ sudo apt install winehq-stable

    Wine 설치 완료.


    카카오톡 공식홈페이지에서 설치파일을 다운로드 합니다.

    Files를 열어 설치 파일에서 오른쪽 버튼을 눌러, Open With Wine Windows Program Loader를 선택합니다. 항목이 안보이면, Open With Other Application을 선택하면 저 항목이 보입니다.

    설치를 진행합니다. 설치 과정은 윈도우와 동일하게 그냥 쭈욱 진행합니다.

    설치가 완료되고 정상적으로 실행되는 것을 확인할 수 있습니다. 이제 인증을 하고 로그인을 하면 됩니다.


    [O] 실행시 화면이 쪼그맣게 나오는 경우

    터미널에서 $ winecfg 를 입력하여, Wine 설정 창을 실행하고, Graphics 탭에서 System Resolution에서 값을 96에서 적절한 값으로 크게 설정한다. 4K HiDPi 환경에선 200 정도가 적당한듯.

  • NVIDIA Container Toolkit를 설치하면 Docker에서도 Nvidia 관련 툴킷을 사용 가능.

    몇가지 선행 조건이 필요함.

    nvidia-docker를 설치해야 하므로, 먼저 Repository에 대한 GPG Key 등록하고, apt 소스 리스트에 Reposity 등록

    $ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
          && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
          && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
                sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
                sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

    완료되었으면 설치 진행.

    $ sudo apt-get update
    $ sudo apt-get install -y nvidia-docker2

    설치 완료 후, docker 재실행.

    $ sudo systemctl restart docker

    정상적으로 설치되었는지 테스트

    $ sudo docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
    
    Sat Jan 28 13:55:11 2023       
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 525.78.01    Driver Version: 525.78.01    CUDA Version: 12.0     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |                               |                      |               MIG M. |
    |===============================+======================+======================|
    |   0  NVIDIA GeForce ...  Off  | 00000000:01:00.0  On |                  Off |
    |  0%   38C    P8    20W / 450W |    741MiB / 24564MiB |      0%      Default |
    |                               |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+
                                                                                   
    +-----------------------------------------------------------------------------+
    | Processes:                                                                  |
    |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
    |        ID   ID                                                   Usage      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+
    

    완료.