• 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      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+
    

    완료.

  • Ubuntu에서 Docker 설치 방법 정리. 기본적으로 Ubuntu Community에서 제공하는 docker.io가 존재하나, Docker.ce를 설치하는 것을 모두 권장하는 듯. Docker는 64bit 운영체계만 지원함.

    먼저 기존 설치된 docker 관련 패키지들을 모두 제거.

    $ sudo apt-get remove docker docker-engine docker.io containerd runc

    또한 /var/lib/docker 안에, 기존에 설치했던 이미지, 컨테이너 등등의 파일이 존재하므로, 필요가 없다면 이것도 삭제하는 것을 권장함.

    다음으로, 설치에 필요한 패키지 설치

    $ sudo apt-get install ca-certificates curl gnupg lsb-release

    Docker Repository GPG Key 등록

    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

    Docker Repository를 apt 소스 리스트에 등록.

    $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

    설치 시작

    $ sudo apt-get update
    $ sudo apt-get install docker-ce docker-ce-cli containerd.io

    설치한 이후 동작 테스트.

    $ sudo docker run hello-world
    
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    2db29710123e: Pull complete 
    Digest: sha256:aa0cc8055b82dc2509bed2e19b275c8f463506616377219d9642221ab53cf9fe
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (amd64)
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/
    
    For more examples and ideas, visit:
     https://docs.docker.com/get-started/

    실행 시 sudo를 사용하지 않고 이용하려면, 사용자 계정을 docker 그룹에 추가하면 됨.

    $ sudo groupadd docker
    $ sudo usermod -aG docker $USER

    재부팅 후 사용 가능.

  • Noetic에선 Cartogrphaer의 패키지 버전을 제공하지 않고 있다. 왜인이 이유는 잘 모르겠지만, 일단 Noetic에서 Cartographer를 사용하기 위해선 소스를 직접 빌드하여 사용해야 한다.

    빌드하기 위해서 필요한 툴을 먼저 설치한다.

    $ sudo apt-get install -y python3-wstool python3-rosdep ninja-build stow

    다음으로, 사용자 workspace에 소스를 받는다.

    $ cd ~/catkin_ws/src
    $ mkdir cartographer
    $ cd cartographer
    $ git clone https://github.com/cartographer-project/cartographer.git
    $ git clone https://github.com/cartographer-project/cartographer_ros.git

    패키지 빌드를 위해 필요한 의존 패키지들을 설치한다.

    $ rosdep install --from-paths . --ignore-src -r -y

    다음으로 abseil를 설치한다. 설치 스크립티는 이미 소스에 포함되어 있으므로, 해당 경로로 이동해 스크립트를 실행해주면 된다.

    $ cd catrographer/scripts
    $ ./install_abseil.sh

    마지막으로, cartographer_ros 패키지를 빌드해준다.

    $ cd ~/catkin_ws
    $ catkin build

    이제 사용하면 됨.

  • Ubuntu 22.04를 설치하고 난 이후에 하는 반복적인 설정 작업들.

    [v] Gnome Tweaks, MP3 코덱 등 설치

    $ sudo apt install ubuntu-restricted-extras
    $ sudo apt update
    $ sudo apt install gnome-tweaks

    [v] Gnome Shell 설정 – 독 아이콘 클릭시 최소화 하도록

    $ gsettings set org.gnome.shell.extensions.dash-to-dock click-action 'minimize'

    [v] Gnome Shell Extension Manager 설치 (사용자 테마 설정 가능)\

    $ sudo apt install gnome-shell-extension-manager

    [v] vim-tiny 제거, vim 설치 : 초기 설치시 vim 에디터의 최소버전이 기본 설치됨. (사용 불편)

    $ sudo apt purge vim-tiny
    $ sudo apt install vim

    [v] net-tools, htop 설치 : ifconfig 등 네트웍 관련 명령어 사용

    $ sudo apt install htop net-tools

    [v] 한글 입력기 설치: fcitx5-hangul, 이후 설정에서 입력기를 fcitx5로 선택.

    $ sudo apt install fcitx5 fcitx5-hangul

    [v] CPU의 주파수 정책(?)를 항상 퍼포먼스 모드로… (성능 향상.. 배터리는 암울…)

    $ sudo apt install cpufrequtils
    $ sudo nano /etc/default/cpufrequtils
    
    GOVERNOR="performance"
    MIN_SPEED="2000MHz"
    
    $ sudo systemctl disable ondemand
    $ sudo systemctl restart cpufrequtils

    [v] Nvidia Driver 설치 : https://ahnbk.dev/?p=29

    [v] tmux 설치 : https://ahnbk.dev/?p=40

    [v] Github CLI 설치: github 관련 작업을 CLI 환경에서 가능하도록 (Repository 생성, 로그인 등)

    $ sudo apt install curl
    $ curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
    $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
    $ sudo apt update
    $ sudo apt install gh

    [v] 폰트 설치

    [v] Visual Studio Code 설치

    $ sudo apt install software-properties-common apt-transport-https wget
    $ wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -
    $ sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"
    $ sudo apt update
    $ sudo apt install code