ROS를 사용하여 개발을 하다보니, ROS의 버전에 따라 Ubuntu의 배포판이 달라져야 하는 경우가 생긴다. 예를 들자면, ROS2의 현재 최신 LTS버전은 Humble로 Ubuntu 22.04에서 설치가 되어야 하고, ROS1의 최종 LTS버전은 Noetic으로 Ubuntu 20.04에서 지원이 멈춰있다 (이제 더이상 배포판 업데이트 지원 불가).
따라서 이 두가지 경우를 모두 사용하기 위해선, 각각 따로 개발용 PC를 구비하던가 아니면 외장 SSD를 이용하는 방법이 있긴 하지만, 번거로운건 어쩔수 없다.
하나의 SSD에 GRUB 부트로더를 하나만 사용하고, 스왑 파티션도 공용으로 사용하고, 루트 파티션만 분리하여 설치하면 위와 같은 문제가 깔끔이 해결된다. 여전히 재부팅이 필요한 건 어쩔수 없지만..^^
기록 차원에서 설치 순서를 간단히 정리해본다. 윈도우와 듀얼부팅으로 사용할 때도 적용 가능. 물론 배포판의 버전이 달라도 상관없음.
먼저, 가장 최신 버전의 배포판을 설치한다. 이건 여느때와 마찬가지로 그냥 설치하면 됨.
설치할 때, 디스크의 파티션을 설정하는 부분이 있는데, 이때 다음과 같은 구조로 만들어준다.
앞쪽 디스크 이름은 각자의 개발 환경에 따라 다를테니, 유념하시면 되고, 기존과 다른 점은 /boot 파티션을 따로 분리한 것과 루트 (/) 파티션을 만들고 또 동일한 크기 혹은 원하는 크기로 또 하나의 파티션을 만들어 놓은 것이다.
이제 설치를 완료 (루트 파티션을 /dev/sda2로 선택)하고.. 부팅이 제대로 되는 것을 확인한 다음…
다음으로 추가로 설치할 배포판 설치를 진행한다. 이때는 바로 설치를 진행하지 말고, 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=""
이제 끝!
Dell 모니터 중 KVM 기능을 지원하는 제품의 경우, Windows나 macOS에서는 DDM (Dell Display Manager)라는 프로그램을 통해서 모니터를 키보드를 통해 제어할 수 있다.
이를 이용하면 유용한 점이, 모니터를 직접 조작하지 않고도, 입력 소스를 선택할 수 있어 두 대의 PC를 오가며 쉽게 작업할 수 있다는 점이다.
다만 아쉽게도 아직까지 Ubuntu에서 동작하는 DDM은 없는 상황이다. 하지만 구글링을 해보면 쉽게 이를 대체할 수 있는 방법이 나온다.
기본적으로 DDM의 역할은 모니터에 연결된 특정칩에 명령을 전달하는 것인데, 이 명령이 DDC/CI 기능을 이용한다. 아마 게임기나 셋탑박스를 연결할 때, 케이블을 꼽기만 해도 해당 입력소스로 자동으로 전환되는 것을 경험해보셨다면, 그 모니터가 DDC/CI 기능을 지원한다는 의미이다.
Ubuntu에도 이러한 기능을 수행하는 커맨드가 존재하는데, ddccontrol 이 그것이다.
설치는 다음과 같이
$ sudo apt install ddccontrol
설치하면 되고..
이제 실행을 해보면, 먼저 모니터를 인식하는지를 확인해보면…
$ ddccontrol -p
ddccontrol version 0.6.0
Copyright 2004-2005 Oleg I. Vdovikin (oleg@cs.msu.su)
Copyright 2004-2006 Nicolas Boichat (nicolas@boichat.ch)
This program comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of this program under the terms of the GNU General Public License.
Detected monitors :
- Device: dev:/dev/i2c-6
DDC/CI supported: Yes
Monitor Name: VESA standard monitor
Input type: Digital
(Automatically selected)
Reading EDID and initializing DDC/CI at bus dev:/dev/i2c-6...
I/O warning : failed to load external entity "/usr/share/ddccontrol-db/monitor/DEL426A.xml"
Document not parsed successfully.
I/O warning : failed to load external entity "/usr/share/ddccontrol-db/monitor/DELlcd.xml"
Document not parsed successfully.
EDID readings:
Plug and Play ID: DEL426A [VESA standard monitor]
Input type: Analog
...
= VESA standard monitor
...
> Input settings
> Input sources
> id=inputsource, name=Input Source Select (Main), address=0x60, delay=-1ms, type=2
Possible values:
> id=analog - name=Analog, value=1
> id=digital - name=Digital, value=3
supported, value=3855, maximum=14
...
와 같이 연결된 모니터 정보가 인식된다.
이중, 중요한 것이, 연결되어 있는 디바이스 정보인데, 여기에선 /dev/i2c-6으로 되어 있다. 또, Input sources를 설정하는 레지스터 주소가 0x60으로 되어 있는 것을 알 수 있다.
이제 0x60에 특정한 값을 넣으면, 해당되는 입력 소스로 전환할 수 있다는 것인데… 이 특정한 값이 무엇인지를 파악해야 하는데, 역시 검색해보면 답이 바로 나온다.
$ cpufreq-info
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
driver: intel_pstate
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 4294.55 ms.
hardware limits: 800 MHz - 5.10 GHz
available cpufreq governors: performance, powersave
current policy: frequency should be within 3.00 GHz and 5.10 GHz.
The governor "performance" may decide which speed to use
within this range.
current CPU frequency is 4.91 GHz.
analyzing CPU 1:
driver: intel_pstate
CPUs which run at the same hardware frequency: 1
CPUs which need to have their frequency coordinated by software: 1
maximum transition latency: 4294.55 ms.
hardware limits: 800 MHz - 5.10 GHz
available cpufreq governors: performance, powersave
current policy: frequency should be within 3.00 GHz and 5.10 GHz.
The governor "performance" may decide which speed to use
within this range.
current CPU frequency is 4.73 GHz.
위와 같이 performance 모드로 셋팅되어 있고, CPU frequency가 올라가 있음을 확인할 수 있음.
$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1
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/
Add user to docker group for execute without sudo command
최근 Dell XPS 15 7590을 업무용으로 사용하게 되었는데, 기존 외장 USB 드라이브에 Ubuntu를 설치하고 사용하는데 약간의 차이가 생겨, 이에 대한 기록 차원에서 정리.
가장 큰 차이는 더이상 델의 최신 버전 노트북에선 Legacy External Boot가 지원되지 않는다고 합니다. 대략 찾아보니 보안 관련, 32bit에 대한 지원 종료 (64bit만 사용) 등의 이유로 그렇게 된 듯 합니다. 따라서 BIOS 화면에서도 이에 관한 옵션이 사라져 있습니다. 델 상담원이랑 채팅을 통해 상담했는데 그렇다고 하네요.
이에 따라 Grub를 이용해서 부팅하던 USB 설치 스틱도 써먹을 수가 없었는데, 이는 Ubuntu에 내장된 Startup Disk Creator 어플리케이션을 사용하여 쉽게 새로운 설치 스틱을 만들수 있습니다.
이와 같은 상황으로 기존 BIOS에서 Secure Boot 옵션을 껐던 적이 있었는데, 이젠 그것은 그냥 켜두시면 됩니다. (보안에 좋답니다. ㅎㅎㅎ)
Ubuntu 설치디스크로 부팅하시고 설치는 그냥 진행 하시되, 파티션 설정 부분에서 기존 /boot로 설정했던 파티션을 EFI 파티션으로 변경해야 합니다. 부트로더 설치할 디스크는 여전히 사용할 외장 USB 드라이브를 선택하시면 되고요. 그렇게 되면 파티션 설정은
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 65535 3932099 3866565 1.9G ef EFI (FAT-12/16/32)
/dev/sda2 3932100 456385739 452453640 215.8G 83 Linux
/dev/sda3 456385740 488366819 31981080 15.3G 82 Linux swap / Solaris
와 같이 될겁니다.
이후 설치가 완료되고, 재부팅을 한 다음 로고가 나올때 F12키를 연타해보면, UEFI 리스트에 외장 USB 드라이브의 이름이 나오고, 이를 선택하면 잠시 검은색 화면이 나오고 재부팅되는데….
다시 F12키로 부팅리스트를 보면 ubuntu라는 UEFI가 추가로 생성됨을 볼수 있습니다. 이제 이것을 선택하면 정상적으로 부팅됩니다.
이제 사용하면 끝.!
덧:
화면 밝기가 조정이 안됩니다. 하지만 이는 버그인듯하여 쉽게 수정이 될듯 합니다.
기존 말썽을 부리던 Killer WiFi 카드의 드라이버가 그냥 잡힙니다. 하지만 성능은 여전히 구립니다.
이전에 사용하던 Dell XPS 15 9570에서 고질적으로 발생하던 스크린 Flickering 현상은 새로운 모델에선 나타나지 않습니다.
해결 방법을 찾아보면 9570 뿐만이 아니라, 외장 GPU를 사용하는 대부분의 델 랩탑에 해당되는 내용인듯. Ubuntu를 사용하다가 노트북을 닫거나, Sleep 모드로 전환 후 다시 노트북을 깨우려고 하면 멈춰버리는 현상이 발생함. 어쩔수 없이 강제 재부팅을 해야 되서 엄청 불편한데, 구글링 후 해결 방법을 찾아봄.
libusb를 이용한 디바이스를 Ubuntu에 연결하고, 관련 프로그램을 실행시 “Permission denied” 혹은 알수없는 오류를 발생하는 경우가 있다. 보통 sudo 명령을 이용하여 실행하면 잘 해결되는 경우인데, 매번 sudo를 붙여서 실행하는 것이 번거롭다. 이때는 udev 룰을 추가하면 해결된다. (제조사에서 제공하는 경우도 있다.)
사용자가 udev 룰을 추가하려면 해당 디바이스의 Vender ID, Product ID를 알아내야 한다. 이는 디바이스를 연결하고, 터미널에서 다음과 같이 입력한 다음 확인이 가능하다.
$ dmesg
이때 나오는 메시지 중 idVendor, idProduct에 나오는 값을 기억한다.
/etc/udev/rules.d 에 다음과 같이 파일을 작성한다.
$ cd /etc/udev/rules.d
$ vi 99-<user_device>.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="<Vendor ID>", ATTRS{idProduct}=="<Product ID>", MODE="0666"
If you have an error when you install python package using pip like this,
Cannot uninstall '~~~'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.