openwrt: extroot 상황에서 판올림.

이전에도 같은 내용을 정리한 적은 있는데.. 조금 더 알아보기 쉽고, Fail-Safe 문서를 남기고 싶었다. (잘 될진 모르겠다.)


예전엔 Extroot 를 한 뒤에도 판올림을 하고, 관련 꾸러미를 그나마 손쉽게 최신판으로 올려줄 수 있었는데, 언젠가부터 그게 잘 되질 않는다. 따라서, 그냥 Extroot 를 초기화하는 편이 훨씬 정신건강에 이롭다.

판올림 전!

현재 Ext Root 파일 복사

지금 사용되고 있는 Ext Root 를, 다른 디렉토리로 복사해둔다. Ext Root 는 모두 지워지고 새로운 파일들로 대체되기 때문.

Ext Root 없이 부팅하여 문제 확인

판올림 전에, Extroot 연결을 해제하고 부팅하여, 연결 문제가 없는지 확인한다.
문제가 없다면, 판올림을 진행한다.

판올림

  • https://downloads.openwrt.org/releases/판본/targets/기종명/generic/ 으로 이동하여 원하는 sysupgrade.bin 파일을 받는다. 이때, 반드시 /tmp 로 받아야 한다고 한다.
  • 옆의 sha256 hash 코드를 확인한다.
  • 받은 파일의 sha256 코드를 확인한다. sha256sum openwrt...bin
  • 두 코드 동일여부를 확인한다.

이상이 없다면, 다음 명령으로 작업을 진행한다. (무사히 오류없이 마무리되길 두손 모아 기도!)

sysupgrade -v <파일명.bin>

시스템에서 선행해야할 작업

Extroot 를 적용하기전, 시스템에서 처리해야할 작업들을 말한다.

판올림이 끝나고 새 펌웨어가 잘 적용되었다면, 다음 작업들을 진행한다.

일반 사용자 확인/생성

/etc/passwd, /etc/shadow 파일등이 있는지 확인한다. 파일은 있으나 비밀번호 항목이 초기화되어 있다면, 나중에 passwd 로 재설정해주면 되므로 신경쓸 필요는 없다.
/home/user 도 있는지 살펴보고, 없다면 만들어준다. /home/user 는 시스템 영역에 만들어지지만, 이건 Ext 로 옮겨갈 예정이므로, 여기엔 디렉토리만 있어도 된다. (실제 파일은 Ext 에 있고, 나중에 다시 복사해오면 된다.)

** zsh?

zsh 를 설치했었다면, /etc/passwd 에 zsh 가 기본셸로 돼 있을 가능성이 있다. 이렇다면, 나중에 일반 사용자로 로그인했을 때, zsh 가 아직 설치돼 있지 않다면 로그인이 불가능하게 된다.
따라서, /etc/passwd 의 일반 사용자 항목에서 기본셸을 /bin/ash 로 바꾼다. (나중에 zsh 를 설치하고 다시 교체해준다.)

만약, 판올림이 아니고, 펌웨어를 재설치(초기화)한 경우 일반 사용자 생성부터 시작해야 한다.

설치할 꾸러미

필수 :

opkg update && opkg install block-mount kmod-fs-ext4 kmod-usb-storage kmod-usb-ohci kmod-usb-uhci

추천 :

opkg update && opkg install stubby vim-full mc coreutils-ls sudo

Stubby 를 이전에 설치했다면, 반드시 시스템에 설치해야만 한다. 그렇지 않으면 DNS 에 문제가 생기고, 원활하게 인터넷을 사용할 수 없다. (물론, LAN 은 된다.) 반드시 Stubby 설정을 확인한다.
공유기 공간이 아주 작지 않은 이상, 이 정도는 설치해도 무리는 없을 듯.

EXT Root (재)설정

예전에 쓴 글 참고. 여기엔 간략하게 방법만 정리.
이 시점에서 외부 드라이브를 삽입한다.

block info 명령으로, 현재 설치된 디스크 상황, uuid 등을 파악한다.
이미 예전에 Ext root 작업을 완료했으므로, /etc/config/fstab/overaly 를 외부 드라이브로 사용하게끔 설정이 돼 있다. (만약 초기화되었다면, 예전 글을 참고하여 다시 작성한다.) 따라서, 그 이 파일이 존재하는지, 설정이 제대로 돼 있는지만 확인한다.

config mount
  option target '/overlay'
  option uuid 'fdacc9f1-0e0e-45ab-acee-9cb9cc8d7d49'
  option enabled '1'

시스템 파일 복사

Ext Root 로 쓸 드라이브를 /mnt 로 마운트하고, 기본 파일들은 모두 지운 뒤(물론, 다른 곳으로 먼저 저장해두고!!), 시스템 파일을 복사해준다.

mount /dev/sda1 /mnt
cp -a -f /overlay/. /mnt
umount /mnt

기존 파일/설정 제 자리로.

이 글 맨 처음에서 복사해뒀던 파일들에서, 필요한 것들을 같은 자리로 복사한다.
설정 파일, /home/user 아래 있는 개인 파일들을 살펴본다.
이 작업은 Ext Root 를 장착하고 재부팅한 뒤 해줘도 된다.

/sbin/backup-to-nfs
/etc/config/*
/etc/crontabs/*
/usr/share/mc
/home/user/*

재부팅!

재부팅하여, 라우팅 문제가 없는지 확인한다. (특히 Stubby!)
문제가 없다면 이제 자잘한 설정에 돌입한다.

opkg 상태 디스크에 저장

/etc/opkg.conf 파일을 편집한다.

원래 값 : lists_dir ext /var/opkg-lists
바꿀 값 : lists_dir ext /usr/lib/opkg/lists

아래 모든 opkg 작업들은, opkg update 후에 실행한다.

자질구레 꾸러미 설치

opkg install coreutils-whoami rsync tar lsblk usbutils whereis shadow-su wakeonlan rpcbind grep tmux iputils-ping htop

root/사용자 계정 확인

자세한 사항은 이전 글에서.

일단 root 로 로그인한 후, passwd 를 실행하여 비밀번호를 다시 만들어준다.
다음, passwd user 로, 일반 사용자 비밀번호도 재생성한다.

/home/user 산하 파일들이 모두 복사됐는지 확인한다. 특히 .ssh 폴더가 있어야 openssh 가 제대로 작동하게 된다.

sudo 설정

visudo 뒤, 다음 두 줄 주석을 지운다.
이렇게 되면, 일반 사용자가 sudo 명령 뒤에 root 의 비밀번호를 입력함으로써 관리자 권한을 획득할 수 있게 된다.

## Uncomment to allow any user to run sudo if they know the password
## of the user they are running the command as (root by default).
Defaults targetpw  # Ask for the password of the target user
ALL ALL=(ALL:ALL) ALL  # WARNING: only use this together with 'Defaults targetpw'

zsh 및 ohmyzsh

opkg install ca-certificates zsh wget git-http

/etc/passwd 를 편집하여, zsh 를 기본셸로 바꿔준다. (/usr/bin/zsh)

ohmyzsh 를 이전에 설치했었고, /home/user/.oh-my-zsh 를 복원했다면, 재설치는 필요없다.
재설치할 필요가 있다면, 일반 계정으로 로그인 한 뒤 다음 명령을 실행한다.

sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

openssh server 설치/설정

자세한 내용은 역시 이전 글 참고.

opkg install openssh-server

설치가 끝난 후 /etc/ssh/sshd_config 파일을 수정해야 한다.

Port xxxx
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no

기본포트는 22 이지만, 다른 포트로 바꾼다.
파일 수정보다는, 이전 파일을 복사해서 그대로 붙여넣는 편이 좋다.

설정 후, enable 과 (re)start

/etc/init.d/sshd enable
/etc/init.d/sshd start 또는 restart

이 외에, Dropbear 포트 변경및 재실행/중지 작업도 필요하다.

** Ext Root 에만 Openssh 를 설치했고, Dropbear 를 중지시켰으므로, Ext Root 를 제거하고 부팅하면 Dropbear 는 자동으로 사용가능한 상태가 된다.

Duck DNS

opkg install ddns-scripts ca-certificates wget luci-app-ddns

nfs

opkg install nfs-utils kmod-fs-nfs kmod-fs-nfs-v3

WireGuard

opkg install luci-proto-wireguard luci-app-wireguard

위는 Luci 용이고, 사실 설정만 해주면 된다.
Wireguard 설정 후, 재부팅 또는 서비스 재실행을 해야 기존에 설정해놓은 network 카드 설정이 제대로 인식된다.

/etc/init.d/network restart
# network reload 로는 안되더라..

만약 뭔가 문제가 있다면, Luci 로 접속하여 WireGuard 쪽을 살펴본 뒤, network restart 해주면 된다.


일단은 이 정도까지.
다음에 또 판올림이 있을 때에 이 문서대로 따라해보고, 문제가 있으면 더 이상 새 문서를 자꾸 만들지 말고, 여기에 보강해가기로!!

Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.