반응형

Kernel 버전

커널버전은 항상 설치된 버전 중에서 최 상위 버전으로 항상 default로 선택 가능하게 되어 있다.
드라이버는 커널 버전에 정확한 숫자에 의존성을 가지고 있기 때문에 사용하는 드라이버가 특정 버전 커널에만 의존적이거나 지원이 된다면, 커널 버전이 올라갈 경우 해당 디바이스는 사용이 불가하기 때문에 가끔 특정 커널 버전에 고정을 해야 하는 경우가 있따.

Kernel 과거 버전 고정하기

현재 설치된 커널 버전 확인

$ sudo dpkg --list | egrep -i --color 'linux-image|linux-headers'

이 명령어로 앞에 ii 또는 ic 라고 나올 수 있는데 각 의미는 아래와 같다.

  • ii : ‘It should be installed and it is installed’
  • rc : ‘It’s removed/uninstalled but it’s configuration files are still there’
    당연하지만 이미 설치된 커널 버전 으로 고정이 가능하다.
    설치가 되지 않았을 경우에는 원하는 커널을 설치 후에 진행해야 한다.

명령어를 시행하면 아래의 형식으로 내용이 출력된다.

ii  linux-headers-6.5.0-18-generic             6.5.0-18.18~22.04.1                     amd64        Linux kernel headers for version 6.5.0 on 64 bit x86 SMP
ii  linux-headers-6.8.0-48-generic             6.8.0-48.48~22.04.1                     amd64        Linux kernel headers for version 6.8.0 on 64 bit x86 SMP
ii  linux-headers-generic-hwe-22.04            6.8.0-48.48~22.04.1                     amd64        Generic Linux kernel headers
ii  linux-image-6.5.0-18-generic               6.5.0-18.18~22.04.1                     amd64        Signed kernel image generic
ii  linux-image-6.8.0-48-generic               6.8.0-48.48~22.04.1                     amd64        Signed kernel image generic
ii  linux-image-generic-hwe-22.04              6.8.0-48.48~22.04.1                     amd64        Generic Linux kernel image

$menuentry_id_option

menuentry_id_option은 GRUB에서 설정에서 사용되는 옵션으로 각 부팅의 항목의 UUID로 사용된다. 이것은 GRUB Bootloader에서 여러개의 커널 항목에서 특정 항목에 사용되는 ID를 정의한다. 여기에 특정 커널의 UUID로 지정을 해줄 경우 Bootloader에서 해당 커널로 Boot sequence를 진행하게 된다.

$ grep submenu /boot/grub/grub.cfg 

명령어를 실행하면 아래와 같은 형식으로 출력된다.

submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282' {

위의 출력 내용 중 gnulinux-advanced-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282 내용을 아래에서 사용하니 저장해둔다.

Kernel 정보 확인

$ grep gnulinux /boot/grub/grub.cfg

커널에서 원하는 커널 정보를 확인한다.

menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282' {
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282' {
  menuentry 'Ubuntu, with Linux 5.4.0-42-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-42-generic-advanced-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282' {
  menuentry 'Ubuntu, with Linux 5.4.0-42-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-42-generic-recovery-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282' {
  menuentry 'Ubuntu, with Linux 5.4.0-39-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-39-generic-advanced-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282' {
  menuentry 'Ubuntu, with Linux 5.4.0-39-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-39-generic-recovery-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282' {

만약에 위의 커널 정보 중에서 5.4.0-42-generic 을 사용하고 싶을 경우 gnulinux-5.4.0-42-generic-advanced-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282을 사용하면 된다.

grub 설정

grub에 default에 대한 항목을 아래와 같이 설정해준다.

$ sudo vi /etc/default/grub

기본적으로 GRUB_DEFAULT=0으로 되어 있는데, 기본으로 가장 상위 버전으로 부팅이 되는 것으로 생각하면 된다.

GRUB_DEFAULT="gnulinux-advanced-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282>gnulinux-5.4.0-42-generic-advanced-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282"

아래와 같이 변경한 내용을 grub에 적용해준다.

$ sudo update-grub
$ reboot

부팅 이후에 원하는 버전으로 부팅이 되었는지 확인해보자

$ uname -a
반응형
반응형

fstab 수정시 옵션을 설정할 수 있는데 보통 구글링하면 defaults로 설정되어 있다.

여기서 default로 "s"를 빼고 작성시 리부팅할때 fstab 비정상 동작으로 boot sequence가 중단될 수 있다.

이럴 경우 ssh daemon이 정상적으로 뜨지 않아서 데이터 센터 등에 서버가 있을 경우 난감한 상황이 발생할 수 있다.

 

처음 작성할 때에 defaults가 아닌 nofail로 설정할 경우, 해당 설정이 정상적이지 않더라도 mount를 비활성화하고 boot sequence를 계속하게 할 수 있다.

차라리 그냥 다른 이유에서도 mount가 비정상 상황이 발생하더라도 nofail로 boot seqence를 계속하도록 수정하는게 중요할 것 같다.

반응형
반응형

USB Format(to FAT32)

Spotlight > 디스크유틸리티

USB 연결 후 "지우기" > "MS-DOS(FAT)" > "지우기" 클릭"

참고 :
https://recoverit.wondershare.kr/flashdrive-recovery/format-usb-flash-drive-to-fat-32-on-mac.html

 

Mac에서 USB 플래시 드라이브를 FAT32로 쉽게 포맷하는 방법

이 페이지에서는 Mac에서 USB 플래시 드라이브를 FAT32로 포맷하는 방법에 대해 설명합니다.

recoverit.wondershare.kr

 

Ubuntu image download

Ubuntu image download

https://ubuntu.com/download

Old Ubuntu image download

https://old-releases.ubuntu.com/releases/

 

Bootable USB

아래의 balenaEtcher 를 다운받고, USB를 연결 후에 "Flash from file"에서 다운받은 iso image를 선택하고 "Select target"에서 USB를 지정해주면 Ubuntu bootable USB 구성이 된다.

https://etcher.balena.io/

 

balenaEtcher - Flash OS images to SD cards & USB drives

A cross-platform tool to flash OS images onto SD cards and USB drives safely and easily. Free and open source for makers around the world.

etcher.balena.io

 

반응형
반응형

Ubuntu 22.04에서 기본적으로 제공되는 방화벽 도구는 UFW(Uncomplicated Firewall) 임 UFW는 간단한 명령어로 방화벽을 설정하고 관리할 수 있도록 도와주며, 아래는 UFW를 사용해 방화벽을 설정하는 방법임.

참고
SSH 연결 상태에서 진행시 default incoming deny rule이 먼저 적용시에 연결이 끊길경우 서버에 물리적으로 모니터 연결해서 붙어야함.
혹시 불안한 경우에는 아래와 같이 진행함.

SSH 포트 허용:

sudo ufw allow ssh

기본 정책 설정 (모든 들어오는 트래픽 차단):

sudo ufw default deny incoming

마지막으로 방화벽을 활성화:

sudo ufw enable

아래는 일반적인 설정 방법

  1. UFW 설치 확인
    일반적으로 UFW는 Ubuntu에 기본 설치되어 있지만, 설치되지 않은 경우에는 다음 명령어로 설치할 수 있음:
sudo apt update  
sudo apt install ufw  
  1. 방화벽 상태 확인
    현재 UFW가 활성화되어 있는지 확인:
sudo ufw status  

이 명령어를 실행하면 방화벽이 활성화되어 있는지, 어떤 규칙이 설정되어 있는지 알 수 있음.

  1. 기본 정책 설정
    UFW의 기본 정책을 설정함. 일반적으로 모든 들어오는 트래픽은 차단하고 나가는 트래픽은 허용하는 방식으로 설정함.
sudo ufw default deny incoming  
sudo ufw default allow outgoing  
  1. 특정 포트 허용하기
    자주 사용하는 서비스의 포트를 허용하려면 다음과 같이 설정함.

SSH 포트 (기본 22번 포트)를 허용:

sudo ufw allow ssh  

HTTP(80번 포트)와 HTTPS(443번 포트)를 허용:

sudo ufw allow http  
sudo ufw allow https  

특정 포트를 허용(ex. 8080 포트):

sudo ufw allow 8080  
  1. IP 주소 또는 네트워크 대역 허용
    특정 IP 주소나 네트워크 대역만 허용하려면 다음과 같이 설정.

특정 IP 주소에서 SSH 접속을 허용:

sudo ufw allow from 192.168.1.100 to any port 22  

특정 대역 (예: 192.168.1.0/24)에서 특정 포트를 허용:


sudo ufw allow from 192.168.1.0/24 to any port 80  
  1. UFW 활성화 및 비활성화
    방화벽을 활성화:
sudo ufw enable  

비활성화하려면:

sudo ufw disable  
  1. 방화벽 규칙 삭제
    잘못 설정된 규칙을 삭제하고 싶을 때는 delete 옵션을 사용.

ex) 8080 포트를 허용하는 규칙을 삭제:

sudo ufw delete allow 8080  
  1. 방화벽 로그 설정
    방화벽의 로그를 활성화:
sudo ufw logging on  

로그를 비활성화:

sudo ufw logging off  
  1. 전체 상태 확인
    설정한 방화벽 규칙을 다시 확인하려면 다음 명령어를 사용함.
sudo ufw status verbose  

이렇게 하면 방화벽의 상태와 함께 설정된 규칙들을 자세히 볼 수 있음.

반응형
반응형

필요 패키지 설치

$ sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

gpg key 추가

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Repository 추가

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

업데이트

$ sudo apt update

Docker 설치

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

필요시 Reboot 혹은 docker service restart

$ sudo reboot now

or 

$ sudo systemctl restart docker

Docker service 확인

$ systemctl status docker

User docker group 권한 추가

$ sudo gpasswd -a ${USER} docker

이후 shell 종료 및 재접속 필요

반응형
반응형

시작전

docker-ce는 설치되어 있어야 함

gpg 키와 저장소 추가

distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
   && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
   && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

apt package repository update

$ sudo apt update

nvidia-docker2 설치

$ sudo apt install nvidia-docker2

필요시 테스트

$ docker run --rm --gpus all ubuntu:18.04 nvidia-smi
반응형
반응형

Ubuntu GUI 영상 캡쳐 방법(22.04)

간단하게 PrintScreen 버튼으로 이미지/동영상 캡쳐 가능
동영상 캡쳐시 상단에 중지 버튼으로 중지시 까지 영상 캡쳐됨

mp4 변환

기본적으로 영상 캡쳐시 포멧은 webm 포멧임.
mp4로 ffmpeg를 이용해서 간단하게 converting 할 수 있음.

기본 변환 방법

 $ ffmpeg -i <INPUT FILE> -vcodec libx264 -acodec aac <OUTPUT FILE>

Scale 지정 converting 방법

 $ ffmpeg -i <INPUT FILE> -vf "scale=<WIDTH>:<HEIGHT>" -vcodec libx264 -acodec aac <OUTPUT FILE>

Scale 지정시 Width 고정(예.1280), Height 가변

 $ ffmpeg -i <INPUT FILE> -vf "scale=1280:trunc(720/2)*2" -vcodec libx264 -acodec aac <OUTPUT FILE>

FPS 지정

영상 캡쳐를 하면 원본 영상 화질과 상관없이 무겁다. FPS를 지정하고 싶을 경우

 $ ffmpeg -i <INPUT FILE> -vf "scale=1280:trunc(720/2)*2" -vcodec libx264 -acodec aac -r <FPS NUM> <OUTPUT FILE>
반응형
반응형

1. 서버에 Disk 인식

확인방법

아래의 명령어로 추가한 Disk의 Device Charactor가 보여야 한다.

$ sudo fdisk -l

추가한 Disk가 안보일 경우

진행 불가, 인식이 안되는 상황으로 OS단의 Command로 진행이 어려움

가능한 원인

  • Raid Controller를 사용할 경우 Raid Controller에서 Virtual Disk로 Raid 설정 이후에 OS에서 Disk가 인식됨
  • Disk 자체가 Board에 연결이 안되었을 경우
  • Disk 비정상 동작 혹은 미동작 상태

2. 실제 사용 중인지 검토

확인 방법

mount가 되었는지 확인한다.
fdisk 명령에서 확인된 device가 보이지 않아야 한다.

$ df -h

3. mount 경로 생성

disk를 mount를 하게 된 논리 경로 주소 생성

$ sudo mkdir /data1

4. Partition 생성

2TB 이상일 경우 GPT(Guid Partition Table) 파티션을 사용해야 함. 여기서는 GPT 를 기준으로 진행함. 대상은 "sda"로 가정함.
순서대로 아래와 같이 입력함

Input

  • mklabel gpt # GPT label
  • Yes
  • unit TB # Set unit as TB
  • mkpart primary 0.00TB 3.5TB # make primary partition
  • print # print information

Example

$ sudo parted /dev/sda
GNU Parted 3.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdc will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes
(parted) unit TB
(parted) mkpart primary 0.00TB 3.5TB
(parted) print
Model: <Drive MODEL INFORMATION> (scsi)
Disk /dev/sda: 3.84TB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      0.00TB  3.84TB  3.84TB               primary

(parted) quit
Information: You may need to update /etc/fstab.

위와 같이 진행 후에는 /dev/sda1 이 확인되어야 한다.

5. Disk 포멧

명령어

$ sudo mkfs.ext4 /dev/sda1

UUID 확인

$ sudo blkid

아래와 같이 UUID를 확인 가능하여야 한다.

/dev/sda1: UUID="XXXX-XXXX-XXXX-XXXX-......-XXXX" TYPE="ext4" PARTLABEL="primary" PARTUUID="YYYYYY-YYYY....YYYY"

6. fstab에 추가

$ sudo vi /etc/fstab

아래의 내용 추가

/dev/disk/by-uuid/XXXX-XXXX-XXXX-XXX-.....-XXXX /data1 ext4 default 0 0

7. mount

아래의 명령어로 mount all 시키면 fstab 정보 기반으로 모든 mount를 시도한다.
실패할 경우 오류 메시지가 나오는데 오타가 없는지 확인해본다.

$ sudo mount -a

disk가 정상적인지 확인해본다.

$ df -h

sda1을 참고하는 경로가 출력되어야 한다.

/dev/sda1       3.5T   45G  3.3T   2% /data1
반응형
반응형

업데이트 이후 갑자기 개인 서버로 사용하는 데스크탑이 꺼지는 현상이 보인다(절전으로 보임)

유의미한 로그를 한번에 찾기 어려워서, 아예 kernel, syslog, dmesg를 로그를 걸어놓고 모니터링했더니 NetworkManager의 Request로 Sleep에 들어가는 어이 없는 상황이 발생하는 것을 확인했다

$ tail -f ./dmesg ./kern.log syslog
manager: sleep: sleep requested (sleeping: no  enabled: yes)

아래의 명령어로 현재 자동 대기 모드로 loading되어 있는지 확인이 가능하다. "loaded" 메시지가 있으면 loading된 상태로 봐야 한다고 한다. 다만 로그를 보면 최근 Sleep Request가 얼마전에 되었는지 나오는데 그것을 보고 확인을 하면 될거 같다.

$ systemctl status sleep.target suspend.target hibernate.target hybrid-sleep.target
● sleep.target - Sleep
     Loaded: loaded (/lib/systemd/system/sleep.target; static; vendor preset: enabled)
     Active: inactive (dead) since Mon 2023-08-07 12:38:08 KST; 38s ago
       Docs: man:systemd.special(7)

아래 명령어로 절전 기능을 끌 수 있다고 해서 설정하였다. 

$ systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

이후에 status로 보면 "Loaded" 상태가 loaded에서 masked로 바뀐 것을 확인할 수 있다.

● sleep.target
     Loaded: masked (Reason: Unit sleep.target is masked.)
     Active: inactive (dead) since Mon 2023-08-07 12:38:08 KST; 2min 47s ago

다시 켜려면 unmask  옵션으로 다시 켤 수 있다고 하는데 할 생각이 없다. 서버가 절전기능이 되면 안되지...

반응형
반응형

1. gstreamer 설치

$ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio

2. Tutorial Code

$ git clone https://gitlab.freedesktop.org/gstreamer/gst-docs 
 

GStreamer / gst-docs · GitLab

GStreamer documentation Please submit new issues and merge requests against the GStreamer mono repo!

gitlab.freedesktop.org

3. Tutorial Test

$ gcc basic-tutorial-1.c -o basic-tutorial-1 `pkg-config --cflags --libs gstreamer-1.0`
반응형

+ Recent posts