이전에도 같은 내용을 정리한 적은 있는데.. 조금 더 알아보기 쉽고, Fail-Safe 문서를 남기고 싶었다. (잘 될진 모르겠다.)
** 여기서 ‘더’는, 한국인들이 좋아하는 영어 ‘definite article‘ 이 아닌, 어떤 정도 이상을 뜻하는 우리말이다.
예전엔 Extroot 를 한 뒤에도 판올림을 하고, 관련 꾸러미를 그나마 손쉽게 최신판으로 올려줄 수 있었는데, 언젠가부터 그게 잘 되질 않는다. 따라서, 그냥 Extroot 를 초기화하는 편이 훨씬 정신건강에 이롭다.
이 글엔 몇가지 대전제가 깔려있다.
- Extroot 는 설정은 이미 완료돼 있다. 따라서 여기선 Extroot 설치와 세부 설정은 그냥 건너뛴다.
- Extroot 를 사용하면서, ssh 서버는 OpenSSH 로 설정했었다. 그러나, Extroot 를 제거하면 기본 서버인 Dropbear 가 사용된다. 따라서 접속을 달리해줘야 한다.
판올림 전!
현재 Ext Root 파일 복사
지금 사용되고 있는 Ext Root(/overlay) 를, 다른 디렉토리로 복사해둔다. Ext Root 는 모두 지워지고 새로운 파일들로 대체되기 때문이다.
외장 드라이브를 Openwrt 기기에서 해제한 뒤, 다른 PC 에 마운트하여 위 작업을 하는게 속도도 빠르고 훨씬 편하다.
Ext Root 없이 부팅하여 문제 확인
판올림 전에, Extroot 연결을 해제하고 부팅하여, 연결 문제가 없는지 확인한다.
문제가 없다면, 판올림을 진행한다.
판올림
- https://downloads.openwrt.org/releases/판본/targets/기종명/generic/ 으로 이동하여 원하는 sysupgrade.bin 파일을 받는다. (현재 내가 사용 중인 기종: ipq40xx)
- 이때, 반드시 /tmp 로 받아야 한다고 한다.
- 옆의 sha256 hash 코드를 확인한다.
- 받은 파일의 sha256 코드를 확인한다.
sha256sum openwrt...bin
- 두 코드 동일여부를 확인한다.
이상이 없다면, 다음 명령으로 작업을 진행한다. (무사히 오류없이 마무리되길 두손 모아 기도!)
sysupgrade -v <파일명.bin>
공유기가 재부팅되면, dropbear 로 접속하여 성공 여부를 확인한다. 접속하면 초기 메시지로 판본이 표시되고, 다시 보고 싶다면, cat /etc/banner
로 가능하다.
Extroot 전, 시스템에서 선행해야할 작업
Extroot 를 적용하기전, 시스템에서 처리해야할 작업들을 말한다.
판올림이 끝나고 새 펌웨어가 잘 적용되었다면, 다음 작업들을 진행한다.
일반 사용자 확인/생성
/etc/passwd
, /etc/shadow
파일등이 있는지 확인한다. 파일은 있으나 비밀번호 항목이 초기화되어 있다면, 나중에 passwd
로 재설정해주면 되므로 신경쓸 필요는 없다./home/user
도 있는지 살펴보고, 없다면 만들어준다. /home/user
는 시스템 영역에 만들어지지만, 이건 Ext 로 옮겨갈 예정이므로, 여기엔 디렉토리만 있어도 된다. (실제 파일은 Ext 에 있고, 나중에 다시 복사해오면 된다.)
** zsh?
zsh 를 설치했었다면, /etc/passwd 에 zsh 가 기본셸로 돼 있을 가능성이 있다. 이렇다면, 나중에 일반 사용자로 로그인했을 때, zsh 가 아직 설치돼 있지 않다면 로그인이 불가능하게 된다. 따라서, zsh 를 설치하지 않았다면, /etc/passwd 의 일반 사용자 항목에서 기본셸을 /bin/ash
로 바꾼다. (나중에 zsh 를 설치하고 다시 교체해준다.)
하지만, 복잡하게 이럴 것없이, 설치가 완전히 끝날 때까지는 dropbear 로, 즉 그냥 root 로 ssh 접속해서 작업하는게 편하다.
만약, 판올림이 아니고, 펌웨어를 재설치(초기화)한 경우 일반 사용자 생성부터 시작해야 한다.
설치할 꾸러미
필수 (ext root 에 필요) :
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 nnn mc coreutils-ls sudo
Stubby 를 이전에 설치했다면, 반드시 시스템에 설치해야만 한다. 그렇지 않으면 DNS 에 문제가 생기고, 원활하게 인터넷을 사용할 수 없다. (물론, LAN 은 된다.) 반드시 Stubby 설정을 확인한다.
공유기 공간이 아주 작지 않은 이상, 이 정도는 설치해도 무리는 없을 듯.
** Stubby 설치 후, Network 을 재시작해줘야 제대로 적용된다./etc/init.d/network restart
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
아래 있는 개인 파일들을 살펴본다.
특히, /etc/config/*
는, 바로 이전에 사용하던 설정파일들을 복사해준다. 이 작업은 재부팅 전에 하는 편이 좋다.
이것을 제외한 나머지 작업들은 Ext Root 를 장착하고 재부팅한 뒤 해줘도 된다.
/sbin/backup-to-nfs /etc/config/* /etc/crontabs/* /usr/share/mc /home/user/*
재부팅! 여기서부턴 ExtRoot 다.
재부팅하여, 라우팅 문제가 없는지 확인한다. (특히 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
로, 일반 사용자 비밀번호도 재생성한다.
/etc/passwd 가 있는지, 제대로 설정돼 있는지만 확인하면 된다.
/home 복사
이전 ext 에 있던, /home
디렉토리를 새 extroot 로 복사한다. 특히 ~/.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 및 oh-my-zsh
opkg install ca-certificates zsh wget git-http
/etc/passwd 를 편집하여, zsh 를 기본셸로 바꿔준다. (/usr/bin/zsh
)
oh-my-zsh 를 이전에 설치했었고, /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
다만, 이렇게 재설치하면 Finger Print 가 달라지기 때문에, 기존에 연결돼 있던 클라이언트 들에서 ssh 접속을 할 때 오류(WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!)가 발생한다.
이럴 땐 짜증내지 말고, 다음 명령으로 해결하면 된다.
% ssh-keygen -R "주소" % ssh-keygen -R "[주소]:포트"
기본 포트를 사용하고 있을 땐 그냥 주소만 넣어줘도 되지만, 포트가 따로 있다면 주소를 대괄호로 묶고, 콜론을 붙인 후 포트번호를 넣어준다.
또는, ~/.ssh/known_hosts 에서 해당 항목을 삭제한뒤, ssh 접속을 다시 해도 된다.
이 외에, 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 kmod-wireguard wireguard-tools
위는 Luci 용이고, 사실 설정만 해주면 된다.
Wireguard 설정 후, 재부팅 또는 서비스 재실행을 해야 기존에 설정해놓은 network 카드 설정이 제대로 인식된다.
/etc/init.d/network restart # network reload 로는 안되더라..
만약 뭔가 문제가 있다면, Luci 로 접속하여 WireGuard 쪽을 살펴본 뒤, network restart
해주면 된다.
cron 설정
이전 크론 파일(/etc/crontabs/*
)을 복사한 뒤, /etc/init.d/cron restart
로 재시작해줘야 한다. (예전엔 그냥 복사만 해줘도 됐었던 듯 한데..)
일단은 이 정도까지.
다음에 또 판올림이 있을 때에 이 문서대로 따라해보고, 문제가 있으면 더 이상 새 문서를 자꾸 만들지 말고, 여기에 보강해가기로!!
** 22.10.10
이 문서를 작성하고 처음으로 OpenWrt 가 판올림되었다. 문서를 참고하여 작업했는데도, 얼추 1시간이나 걸렸다.
흠.. 시행착오를 좀 더 정리해놨는데, 과연 다음 번엔?
** 22.10.16
두번째 시도. 30분여로 줄었음. 근데 이건 문서 덕이라기보다는, 해본지 일주일도 안됐으니 기억이 새록새록이라 그랬겠지.
나도 살짝 불안하다는 느낌이 있었는데(며칠 전 Luci 로 접속이 안된 적이 있다.), 이번엔 개선판이 정말 빨리 나왔다.