반응형

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를 계속하도록 수정하는게 중요할 것 같다.

반응형
반응형

야탑에 외근이 있어서 다녀왔는데 간단하게 먹을만한 식당을 찾아보다가 외부 간판에 먹을만한 메뉴가 잘 나와있길래 들어가 보았다.



주문은 키오스크로 주문을 받으며 다른 가게처럼 쓸데 없이 단계가 많지 않고 간결히 필요한 정보만 보여서 쓰기 편하고 좋았다
주문은 전라도식 고추장 덮밥을 주문했으며 추가로 고기 100그람을 추가했는데 4천원 정도 되었고, 음식값 12,000으로 총 16,000 원 정도 지불했다.



주문이 들어가고 음식이 조리되면서 새로운 음식이 신선히 만들어지는 구나 하고 느낄만큼 음식냄새가 싹 퍼지며 화려한 불쇼가 보여졌다.
음식을 기다리면서 불쇼를 보며 음식에 대한 기대감을 가지고 기다릴 수 있어서 좋았다.

 

 

음식이 대체로 정갈하고 플레이팅이 먹음직스럽게 나왔다. 특히 파채가 곁들여졌는데 개인적으로 생파를 좋아하고 돼지고기와 궁합이 참 좋았다.
돼지는 화려했던 불쇼만큼 불맛이 풍부히 났으며, 너무 맵거나 짜지 않고 맛있었지만, 양은 4천원 만큼의 고기가 추가되었다고 보기보다 원래 만큼의 양이 아닐까 싶을 정도로 조금 적어보였다.
지방이 많은 돼지고기의 특성상 조리후 줄어드는 지방의 양만큼 양이 적어져서 그렇다고 생각은 들지만 16,000원의 양이라고 보기엔 아쉬움이 들지 않기는 쉽지 않았다.

다만 같이 나오는 김치찌개가 그 아쉬움을 커버해주는데 김치찌개 외 다른 메뉴로 선택 가능하다. 김치찌개는 단순히 김치국 같은 대충만들어진 느낌보다는 제대로 만들어진 진한 김치찌개 맛이며 진짜 맛있었다.


잔찬 3개와 디저트 한개가 나오는데 반찬 양이 요즘 다 그렇겠지만 너무 작았다. 김치의 양이 마치 집에 있는 김치 한조각을 젓가락으로 꺼내서 그것을 잘게 썰고 썰어진 김치 한개의 조각들 중 절반을 플레이팅 하면 이정도가 되지 않을까 싶을 정도라는 생각이 들었다.




나중에 야탑에 외근갈 일이 있는데 배가 고프면 또 들릴까 하는 생각이 들 정도로 맛이 나쁘지 않았다.
전체적으로 가게가 깨끗하고 정갈하고 맛도 준수한 편이었다.

다만 개인적으로 크게 아쉬웠던건 이렇게 정갈하게 음식을 내 주시면서 마스크 없이 음식쪽으로 재채기를 하셔서 먹는 내내 조금 찝찝했는데 다른 분들은 경험할 일이 없겠지;;

반응형
반응형

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

 

반응형
반응형

다음은 SSH 포트(기본 22번 포트)와 3000, 3001번 포트만 허용하고 나머지는 차단하는 iptables 명령어.

설정 명령어
SSH 포트를 먼저 허용 (기본적으로 22번 포트를 사용). 만약 SSH 포트를 변경했다면 해당 포트로 수정.

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

필요한 포트를 허용 (예: 3000번, 3001번 포트).

sudo iptables -A INPUT -p tcp --dport 3000 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 3001 -j ACCEPT

로컬호스트(127.0.0.1)에서 오는 트래픽은 허용.

sudo iptables -A INPUT -i lo -j ACCEPT

기본 정책을 설정하여 나머지 모든 입력 트래픽을 차단.

sudo iptables -P INPUT DROP

나가는 트래픽은 허용하려면 아래 명령을 추가.

sudo iptables -P OUTPUT ACCEPT

연결이 이미 허용된 세션(ESTABLISHED, RELATED)에 대해서는 계속 허용하도록 설정.

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

이 설정을 완료하면 SSH(22번 포트), 3000번 포트, 3001번 포트만 허용되고 나머지 트래픽은 모두 차단.

설정 저장
Ubuntu에서는 iptables 설정이 서버 재부팅 후에도 유지되도록 저장해야 함.

iptables-persistent 패키지를 설치:

sudo apt install iptables-persistent

설정을 저장합니다:

sudo netfilter-persistent save

이제 iptables 설정이 시스템 재부팅 후에도 유지됨.

반응형
반응형

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  

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

반응형
반응형

티스토리 스킨

티스토리는 다양한 스킨을 제공하지만, 처음에 티스토리 시작할때는 이쁜 스킨도 많았던거 같은데, Customize가 가능해서 그런지 이제 기본 스킨은 너무 투박하고 쓸만한게 없는거 같아서 새로운 것을 변경하고자 검색해봤는데, 실수로 "티스토리 스킨" 이라고 검색해야 하는데, "에드센스 스킨"이라고 검색하는 바람에 찾게된 중요한 내용이 있었다.

변경후 많은 사람들이 당황해 한게 제목부터 느껴진다.

티스토리 변경시 에드센스 스킨

티스토리 스킨을 변경할 경우 블로그(사이트)의 layout등 구조의 변경이 발생한다.
google에서는 그 layout의 변경이 새로운 사이트로 인식을 하게 될 수 있다고 하고, 검색을 해보니 고정적인 수익이 0이 된다는 내용의 글들이 많다.

수익이 없지만, 스킨을 변경 안하기로...

이 블로그는 뭐 10년에 $5 벌릴까 말까하는 딱히 수익성이 있는 블로그가 아니다.
그러함에도 스킨을 변경하지 않기로 한 것은 상위 노출 이 현재 되어있는 글들 마저도 모두 신규 사이트로 인식되어, 모두 노출이 초기화 될 수 있다는 점이다. 굳이 돈은 안되지만 쓸데없는 욕심으로 상위 노출된 글들은 포기하기가 껄끄럽다. 그렇다고 엄청 블로그가 이뻐지는 것은 아니고...

자세한 구글의 설명

아래는 위에 설명한 내용들의 구글의 답변 링크이다.

https://support.google.com/adsense/thread/19440243/%EC%8A%A4%ED%82%A8-%EB%B3%80%EA%B2%BD-%ED%9B%84-%EC%95%A0%EB%93%9C%EC%84%BC%EC%8A%A4-%EC%88%98%EC%9D%B5%EC%9D%B4-%EC%95%88%EB%82%98%EC%9A%94?hl=ko

 

스킨 변경 후 애드센스 수익이 안나요 - Google AdSense 커뮤니티

 

support.google.com

 

반응형
반응형

포인트

  • 그냥 watch 사용시에는 어디가 바꼈는지 매번 눈으로 확인해야 하는데, 이것을 diff 명령어로 틀린 부분만 표시할 수 있음.
  • 색을 표시하는 부분은 색코드를 직접 이용할 수 있지만 watch 명령어와 사용시 색이 표시 되지 않고 색 코드가 그대로 노출되는 되기 때문에 일반적으로 output에 색코드를 직접 기입하는 대신에 tput을 이용하면 색을 표시할 수 있음

샘플 코드

#!/bin/bash

# temp file
LAST_OUTPUT="/tmp/last_df_output.txt"
NEW_OUTPUT="/tmp/new_df_output.txt"

# color supporting check
if [ -t 1 ]; then
    RED=$(tput setaf 1)
    RESET=$(tput sgr0)
else
    RED=""
    RESET=""
fi

# initial output 
df -h > "$LAST_OUTPUT"

while true; do
    # new output
    df -h > "$NEW_OUTPUT"

    if ! cmp -s "$NEW_OUTPUT" "$LAST_OUTPUT"; then
        clear
        # diff will be printed in red color
        diff --unchanged-line-format="%L" --old-line-format="" --new-line-format="${RED}%L${RESET}" "$LAST_OUTPUT" "$NEW_OUTPUT"
    fi

    # last output store
    mv "$NEW_OUTPUT" "$LAST_OUTPUT"

    # time interval
    sleep 1
done
반응형
반응형

llama-stack

llama3.2, llama3.1 등을 download 하려고 홈페이지에서 시도하였으나 llama-stack을 pip로 설치하라고 뜬다.
pip install llama-stack을 하였으나 설치에는 큰 문제가 없는 것 같은데 llama 명령어가 없어서 진행이 안된다.

원인

llama-stack github page에 찾아가보면 requirement.txt에 보면 llama-models 등 dependency packages가 보이는데 pip list로 확인을해봐도 설치가 되지 않았고, search를 해봐도 되지 않는다.
원인은 python3 버전에 원인이 있다. python version이 3.10이상이어야 하는데 python3.8로 시도하면 minimum python version 에 위배되는 패키지들은 설치가 되지 않는다.

해결방법

python3.10을 설치해서 python3.10을 설치하여 3.10으로 llama-stack을 설치해줄 경우 정상적으로 초반과는 다르게 많은 패키지들이 설치되고 llama명령어가 있는것이 확인된다.

참고

https://sonseungha.tistory.com/678

 

Ubuntu 20.04에 python 3.10 설치하기

Python 3.10은 Ubuntu의 기본 저장소에서 사용할 수 없습니다. 따라서 Python 3.10 설치를 위해 다른 저장소를 추가해야 합니다. deadsnake라는 이름의 launchpad 저장소에서는 Python 패키지에 사용할 수 있습

sonseungha.tistory.com

python3.10으로 재설치

$ apt install software-properties-common # 필요시
$ apt install python3.10-distutils
$ curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10
$ python3.10 -m pip install llama-stack
반응형
반응형

Env

Install nvidia docker env toolkit

Run

$ docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Execute

$ docker exec -it ollama ollama run llama3.1:8b

help

>>> /?

Exit

>>> /bye
or
ctrl + d

llama3.1 taglist

https://ollama.com/library/llama3.1/tags

 

Tags · llama3.1

Llama 3.1 is a new state-of-the-art model from Meta available in 8B, 70B and 405B parameter sizes.

ollama.com

 

반응형

+ Recent posts