오렌지파이5플러스
로 간단한 데탑환경 만들기- 2.5Gbps 듀얼랜을 이용하여
스위칭허브
없이데이지체인
으로 구성된 클러스터 만들기
끝.
오렌지파이5플러스
로 간단한 데탑환경 만들기스위칭허브
없이 데이지체인
으로 구성된 클러스터 만들기끝.
nvme
류의 부품을 달면 과부하시 순간적으로 16와트 넘게 튀므로 5V/4A 필요. 달린게 없으면 5V/3A 충전기도 괜찮음.dd
사용. 나는 Etcher로 ssd 이미징이 안돼서 sd카드로 띄운 리눅스에서 dd
로 이미징sudo fdisk -l | grep "nvme0n1"
lspci
sudo dd bs=1M if=/dev/zero of=/dev/nvme0n1 count=2000 status=progress
sudo dd bs=1M if=우분투이미지.img of=/dev/nvme0n1 status=progress oflag=direct
sudo mkdir /media/usb
ls /dev/sd*
# sudo mount -t ntfs-3g /dev/sda1 /media/usb
sudo mount -t exfat /dev/sda1 /media/usb
dd
로 삭제없이 될 때까지 이미지 쓰기fcitx5
, fcitx5-hangul
설치 및 재시작 > 설정에서 hangul 추가htop
온도가 N/A
로 표시됨 - 뭔짓을 해도 안되니 포기하고 psensor
사용M7111-1331
오류 - 아래 옵션을 직접 실행하거나 바로가기 생성chromium-browser --user-agent="Mozilla/5.0 (X11; CrOS aarch64 15236.80.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
# 데이터폴더를 따로 잡아서 실행
chromium-browser --user-data-dir="/home/username/.chrome_ott_data" --user-agent="Mozilla/5.0 (X11; CrOS aarch64 15236.80.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
KB국민은행
은 보안 프로그램이 필요 없어서 브라우저 인증서로 잘 동작하고, 다른 은행은 강제하는 보안프로그램이 Linux aarch64를 지원하지 않아서 포기systemd
서비스로 추가.sudo vi /etc/systemd/system/heartbeat-green-only.service
[Unit]
Description=LED Control Service
After=sysinit.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo none > /sys/class/leds/blue_led/trigger && echo heartbeat > /sys/class/leds/green_led/trigger'
[Install]
WantedBy=multi-user.target
sudo systemctl enable heartbeat-green-only.service
sudo apt install gnome-shell-extension-manager
sudo apt install gnome-tweak-tool
* 파란화면, 녹색화면 나올 때 - `--hwdec=videotoolbox`
* 볼륨 작을 때 - `--volume-max=200`
아래처럼 하던지 아니면, export
제외한 아래 환경변수를 /etc/environment
에 추가
export PAN_MESA_DEBUG=gofaster,gl3
윈도우의 GoodbyeDPI
비스무리하게.. SNI, DPI 등. iptables
설치 필요
sudo iptables -A INPUT -p tcp --tcp-flags RST RST --sport 443 -j DROP
끝.
Orange Pi 5 Plus
에 붙어있는 듀얼랜을 이용하여 daisy chain topology로 cluster 꾸미기.. 위한 초기작업 메모enP3p49s0
, 다음은 enP4p65s0
# sudo vi /etc/netplan/50-cloud-init.yaml
network:
ethernets:
enP3p49s0:
dhcp4: true
optional: true
enP4p65s0:
addresses: [172.16.0.10/24]
version: 2
renderer: networkd
# sudo vi /etc/netplan/50-cloud-init.yaml
network:
ethernets:
enP3p49s0:
addresses: [172.16.10.20/24]
enP4p65s0:
addresses: [172.16.10.21/24]
bridges:
br0:
interfaces: [enP3p49s0, enP4p65s0]
addresses: [172.16.0.20/24]
routes:
- to: default
via: 172.16.0.10
nameservers:
addresses: [8.8.8.8, 8.8.8.4]
version: 2
# sudo vi /etc/netplan/50-cloud-init.yaml
network:
ethernets:
enP3p49s0:
addresses: [172.16.10.30/24]
enP4p65s0:
addresses: [172.16.10.31/24]
bridges:
br0:
interfaces: [enP3p49s0, enP4p65s0]
addresses: [172.16.0.30/24]
routes:
- to: default
via: 172.16.0.10
nameservers:
addresses: [8.8.8.8, 8.8.8.4]
version: 2
# sudo vi /etc/netplan/50-cloud-init.yaml
network:
ethernets:
enP3p49s0:
addresses:
- 172.16.0.40/24
routes:
- to: default
via: 172.16.0.10
nameservers:
addresses: [8.8.8.8, 8.8.8.4]
enP4p65s0:
dhcp4: true
optional: true
version: 2
sudo netplan apply
# sudo vi /etc/sysctl.conf
net.ipv4.ip_forward=1
# 설정 적용
sudo sysctl -p
# iptables 설치, 설정
sudo apt install iptables
sudo iptables -t nat -A POSTROUTING -o enP3p49s0 -j MASQUERADE
# iptables 설정 저장/관리 서비스 설치, 실행
sudo apt install iptables-persistent
sudo service netfilter-persistent save
sudo service netfilter-persistent start
# 테스트
# - POSTROUTING/MASQUERADE 설정 후, 아이피로 핑 요청시 응답을 받아야 됨
# - persistent 패키지가 저장/로드 기능이니까 재부팅해도 핑 응답을 받아야 됨
# - netplan 설정에서 nameservers 설정이 없으면 도메인으로 핑 요청시 응답 못 받음
ping 8.8.8.8
ping yahoo.com
ping bing.com
ping google.com
proxyserver:
address: 192.168.100.43
port: 22
username: ubuntu
authmethod: privatekey # password or privatekey or agent
password: mypassword
privatekey: ~/.ssh/my_key.pem
internalserver:
address: 172.16.0.20
port: 22
localport: 1620
proxyserver:
address: 192.168.100.43
port: 22
username: ubuntu
authmethod: privatekey # password or privatekey or agent
password: mypassword
privatekey: ~/.ssh/my_key.pem
internalserver:
address: 172.16.0.30
port: 22
localport: 1630
proxyserver:
address: 192.168.100.43
port: 22
username: ubuntu
authmethod: privatekey # password or privatekey or agent
password: mypassword
privatekey: ~/.ssh/my_key.pem
internalserver:
address: 172.16.0.40
port: 22
localport: 1640
검색하면 많이 나오니까 생략. 나는 어차피 장난감이라 ssh-keygen -t rsa
로 만들어진 키페어 하나로 pub키
를 모든 sbc의 ~/.ssh/authorized_keys
에 복붙하고 비밀키
는 만능열쇠
로 사용.
sbc2 접속 테스트
ssh -i ~/.ssh/my_key.pem ubuntu@localhost -p1620
# Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.10.160-rockchip aarch64)
# ...
끝.
get node
실행 시 EXTERNAL-IP
는 조금 늦게 뜸curl -sfL https://get.k3s.io | sh -s - \
--write-kubeconfig-mode 644 \
--node-ip 172.16.0.10 \
--node-external-ip 192.168.100.43
kubectl get node -o wide
kubectl get all -o wide
kubectl get service --all-namespaces
# At server
sudo cat /var/lib/rancher/k3s/server/node-token
# `tokentokentokentoken`
# At agent
curl -sfL https://get.k3s.io | K3S_URL=https://172.16.0.10:6443 \
K3S_TOKEN="tokentokentokentoken" sh -
sudo kubectl proxy --address="0.0.0.0" --port=8080 --accept-hosts="^*$"
# https://docs.k3s.io/installation/uninstall
# Kill all
# /usr/local/bin/k3s-killall.sh
sudo k3s-killall.sh
# Uninstall server
# /usr/local/bin/k3s-uninstall.sh
sudo k3s-uninstall.sh
# Uninstall worker
# /usr/local/bin/k3s-agent-uninstall.sh
sudo k3s-agent-uninstall.sh
sudo vi /etc/systemd/system/shutdown-k3s.service
[Unit]
Description=Kill containerd-shims on shutdown
DefaultDependencies=false
Before=shutdown.target umount.target
[Service]
ExecStart=/usr/local/bin/k3s-killall.sh
Type=oneshot
[Install]
WantedBy=shutdown.target
sudo systemctl enable shutdown-k3s.service
kubectl --namespace kube-system port-forward deployments/traefik 9000:9000 &
curl localhost:9000/dashboard/
# <!DOCTYPE html><html><head><title>Traefik</title><meta charset=utf-8>...
config_1.yaml
# Proxy SSH server
proxyserver:
address: 192.168.100.43
port: 22
username: ubuntu
authmethod: privatekey # password or privatekey or agent
password: mypassword
privatekey: ~/.ssh/my_key.pem
# Internal (SSH) server
internalserver:
address: 127.0.0.1
port: 9000
# Port for localhost connection
localport: 1619
./tunnel_linux_arm64 ./config_1.yaml &
curl localhost:1619/dashboard/
# <!DOCTYPE html><html><head><title>Traefik</title><meta charset=utf-8>...
끝.
sbc1 ~ sbc4 모두 아래와 같이 진행
sd 부팅 - 오렌지파이5플러스
용 서버 기본이미지 알아서 굽고 부팅..
known_host 체크 건너뛰기 #1 - 모니터 안쓰고 ssh접속시 같은 ip 충돌 무시
ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" userid@hostip
~/.ssh/config
에 아래 내용 추가# ~/.ssh/config
LogLevel ERROR
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
e2fsck -f /dev/nvme0n1p2
# ...
sudo resize2fs /dev/nvme0n1p2 384G
# resize2fs 1.46.5 (30-Dec-2021)
# Resizing the filesystem on /dev/nvme0n1p2 to 100663296 (4k) blocks.
# The filesystem on /dev/nvme0n1p2 is now 100663296 (4k) blocks long.
sudo fdisk /dev/nvme0n1
p
# Disk /dev/nvme0n1: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
# ...
#
# Device Start End Sectors Size Type
# /dev/nvme0n1p2 1081344 1000215182 999133839 476.4G Linux filesystem
d
2
# Partition 2 has been deleted.
n
2
First sector (34-1000215182, default 1081344): 걍 엔터
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1081344-1000215182, default 1000215182): +384G
# Created a new partition 2 of type 'Linux filesystem' and of size 384 GiB.
# Partition #2 contains a ext4 signature.
######## !!!아래 주의!!! : 시그니처 지우면 부팅 안되므로 반드시 N 눌러서 시그니처 유지할 것.
######## mkfs, gdisk, parted로 새로 만들 수 있지만 귀찮기 때문에 유지하는게 낫다.
Do you want to remove the signature? [Y]es/[N]o: N
# The signature will be removed by a write command.
w
# The partition table has been altered.
# Calling ioctl() to re-read partition table.
# ...
lsblk
# nvme0n1 259:0 0 476.9G 0 disk
# ├─nvme0n1p1 259:1 0 512M 0 part
# └─nvme0n1p2 259:2 0 384G 0 part
e2fsck -f /dev/nvme0n1p2
384GB로 줄이고 아래와 같이 남은 공간에 파티션 생성
sudo fdisk /dev/nvme0n1
n
Partition number (3-128, default 3): 걍 엔터
First sector (34-1000215182, default 806389760): 걍 엔터
Last sector (806387713-1000215182, default 1000215182): 걍 엔터
w
# The partition table has been altered.
# Calling ioctl() to re-read partition table.
# ...
fdisk -l 실행시 아래 msg의 빨간색 메시지가 나오면 아래 parted 같이 실행
GPT PMBR size mismatch (8191 != 32767) will be corrected by write.
The backup GPT table is not on the end of the device.
sudo parted -l
# ...
# you can fix the GPT to use all of the space (an extra 24576 blocks) or continue
# with the current setting?
Fix/Ignore? F
# ...
lsblk
# nvme0n1 259:0 0 476.9G 0 disk
# ├─nvme0n1p1 259:1 0 512M 0 part
# ├─nvme0n1p2 259:2 0 384G 0 part
# └─nvme0n1p3 259:3 0 92.4G 0 part
sudo mkfs.xfs -f /dev/nvme0n1p3
lsblk
# nvme0n1 259:0 0 476.9G 0 disk
# ├─nvme0n1p1 259:1 0 512M 0 part
# ├─nvme0n1p2 259:2 0 384G 0 part
# └─nvme0n1p3 259:3 0 92.4G 0 part
sudo mkfs.btrfs -f /dev/nvme0n1p3
끝.
서버/클라
를 구분했지만, 모든 노드를 서버/클라
로 잡아줘도 상관없다.
K3s 설치
를 제외하고 이전 메모에 적어둔 모든 작업을 먼저 진행/etc/hosts
에 아래 내용 추가127.0.0.1 localhost
...
172.16.0.10 opi5p1
172.16.0.20 opi5p2
172.16.0.30 opi5p3
172.16.0.40 opi5p4
모든 노드
에서sudo mkdir /mnt/glufs
sudo mount /dev/nvme0n1p3 /mnt/glufs
모든 노드
에서sudo apt install glusterfs-server
sudo systemctl start glusterd
systemctl enable glusterd
아무거나 하나의 노드
에서# 여기서는 opi5p2에서 실행
sudo gluster peer probe opi5p3
sudo gluster peer probe opi5p4
# 연결상태 확인
sudo gluster peer status
sudo gluster pool list
아무거나 하나의 노드
에서# 여기서는 opi5p2에서 실행
sudo gluster volume create dist_vol \
opi5p2:/mnt/glufs/brick \
opi5p3:/mnt/glufs/brick \
opi5p4:/mnt/glufs/brick
# 볼륨 확인
sudo gluster volume info
sudo gluster volume start dist_vol
/mnt
대신 /media
로 잡음sudo mkdir /media/gludisk
sudo apt install glusterfs-client
sudo mount.glusterfs opi5p2:/dist_vol /media/gludisk
xfs
마운트 > gluster volume
재시작# 모든 노드에서 입력
sudo mount /dev/nvme0n1p3 /mnt/glufs
# 하나의 노드에서 입력
sudo gluster volume stop dist_vol
sudo gluster volume start dist_vol
sudo mount.glusterfs opi5p2:/dist_vol /media/gludisk
끝.
OpenMPI
사용. 장난감 수준에서는 딱히 차이가 없다고 한다.sudo apt install openmpi-bin openmpi-common libopenmpi-dev
# 모든 노드에서 실행
mpicc --showme
# gcc -I/usr/lib/aarch64-linux-gnu/openmpi/include -I/usr/lib/aarch64-linux-gnu/openmpi/include/openmpi -L/usr/lib/aarch64-linux-gnu/openmpi/lib -lmpi
# 모든 노드에서 실행
eval `ssh-agent`
ssh-add .ssh/my_key.pem
# Identity added: .ssh/my_key.pem (username@opi5p0)
ssh-add -l
# 골라서 삭제
ssh-add -d .ssh/my_key.pem
# 모조리 삭제
ssh-add -D
ssh username@opi5p1 ~ 4
까지 접속해보고 known_host
에 추가시킨다./*
hellompi.c
source: https://bconfiden2.github.io/2022/05/15/mpi-cluster
*/
#include <mpi.h>
#include <stdio.h>
int main(int argc, char** argv) {
MPI_Init(NULL, NULL);
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
char processor_name[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(processor_name, &name_len);
printf("Hello world from processor %s, rank %d out of %d processors\n",
processor_name, world_rank, world_size);
MPI_Finalize();
}
mpicc hellompi.c
mpirun -np 4 -host opi5p1,opi5p2,opi5p3,opi5p4 ./a.out
# Hello world from processor opi5p1, rank 0 out of 4 processors
# Hello world from processor opi5p3, rank 2 out of 4 processors
# Hello world from processor opi5p4, rank 3 out of 4 processors
# Hello world from processor opi5p2, rank 1 out of 4 processors
끝.
기본 상태에서는 16 보다 높은 버전으로 올리지 못한다
sudo apt install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
NODE_MAJOR=20
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
liujianfeng1994-ubuntu-rockchip-multimedia-jammy.list
보다 먼저 걸리게 설정# sudo touch /etc/apt/preferences.d/nodesource
# sudo vi /etc/apt/preferences.d/nodesource
Package: *
Pin: origin deb.nodesource.com
Pin-Priority: 1601
sudo apt remove nodejs
명령으로 삭제 후 설치sudo apt update
sudo apt install nodejs
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/yarn-keyring.gpg
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update
sudo apt install yarn
생각나면 계속 작성.
끝.
감사합니다 :)