본문 바로가기

개인서버만들기

Termux에 QEMU 설치하고 OS 띄우기

 

이제 QEMU를 설치하고 OS를 띄워보자.
여기선 Alpine을 설치할 거다.

 

 

QEMU 관련 패키지 설치

pkg install -y qemu-utils qemu-common qemu-system-x86_64-headless

 

 

 

 

 

termux-QEMU VM image 생성

 

qemu-img create -f qcow2 alpine.img 20g

 

 

디스크 이미지를 qcow2 방식으로 구축하고 용량은 20GB로 설정한다.

 

용량은 휴대폰이 감당할 수 있는 범위 내 자유롭게 설정하면 된다.

 

 

 

Alpine 가상머신 파일 가져오기

 

wget https://dl-cdn.alpinelinux.org/alpine/v3.15/releases/x86_64/alpine-virt-3.15.3-x86_64.iso

 

2024년 12월 기준 3.20.3 버전이 있을텐데,

최신 버전으로 진행해도 상관없다.

 

 

 

단, 이 글에 나오는 alpine 버전은 3.15.3이다.

때문에, 다른 버전을 쓴다면

명령어를 그대로 복사한 뒤, 버전만 변경하면 된다.

 

 

 

가상머신 구동하기

qemu-system-x86_64 -machine q35 -m 2048 -smp cpus=4 -cpu qemu64 \
-drive if=pflash,format=raw,read-only=on,file=$PREFIX/share/qemu/edk2-x86_64-code.fd \
-netdev user,id=n1,hostfwd=tcp::2222-:22 \
-device virtio-net,netdev=n1 \
-cdrom alpine-virt-3.15.3-x86_64.iso \
-nographic alpine.img

 

 

cdrom에 가상머신 파일을 넣어 해당 이미지로 구동한다.

여기서 ssh는 2222번으로 접속할 수 있게 설정해놓았다.

필요 시, 3022번이나 3122 등 다른 포트로 연결해도 된다.

 

cpus는 코어 갯수다.

휴대폰 코어 갯수는 Termux에서 echo $(nproc)로 사용가능한 코어 수를 확인한 다음 맞춰 세팅하면 된다.

memory도 감당 가능한 범위 내에서 설정한다. (권장은 2GB)

 

 

 

 

구동하는데 시간이 꽤 걸린다.

커피 한 잔 타고 와도 되고

샤워 빨리 하는 사람은 샤워하고 와도 된다.

 

 

 

 

 

구축이 끝나면 로그인하라고 하는데

 

root 로 로그인하면 된다.

 

setup-alpine

 

위 명령어로 몇 가지 설정을 해야 한다.

 

 

keyboard layout 설정

localhost:~# setup-alpine
Available keyboard layouts:
af     be     cn     fi     hu     it     lk     mm     pl     sy     uz
al     bg     cz     fo     id     jp     lt     mt     pt     th     vn
am     br     de     fr     ie     ke     lv     my     ro     tj
ara    brai   dk     gb     il     kg     ma     ng     rs     tm
at     by     dz     ge     in     kr     md     nl     ru     tr
az     ca     ee     gh     iq     kz     me     no     se     tw
ba     ch     epo    gr     ir     la     mk     ph     si     ua
bd     cm     es     hr     is     latam  ml     pk     sk     us
Select keyboard layout: [none] us
Available variants: us-alt-intl us-altgr-intl us-chr us-colemak us-colemak_dh us-colemak_dh_iso us-dvorak-alt-intl us-dvorak-classic us-dvorak-intl us-dvorak-l us-dvorak-mac us-dvorak-r us-dvorak us-dvp us-euro us-haw us-hbs us-intl us-mac us-norman us-olpc2 us-rus us-symbolic us-workman-intl us-workman us
Select variant (or 'abort'): us

 

keyboard layout고 variant는 모두 us로 설정한다.

 

 

 

 

 

이후 몇 가지 설정을 물어볼텐데 모두 엔터하면 된다.

Enter system hostname (fully qualified form, e.g. 'foo.example.org') [localhost]
Available interfaces are: eth0.
Enter '?' for help on bridges, bonding and vlans.
Which one do you want to initialize? (or '?' or 'done') [eth0]
Ip address for eth0? (or 'dhcp', 'none', '?') [dhcp]
Do you want to do any manual network configuration? (y/n) [n]

 

 

 

 

 

 

 

비밀번호 설정하기

udhcpc: started, v1.34.1
udhcpc: broadcasting discover
udhcpc: broadcasting select for 10.0.2.15, server 10.0.2.2
udhcpc: lease of 10.0.2.15 obtained from 10.0.2.2, lease time 86400
Changing password for root
New password:

 

root 계정의 비밀번호를 설정하라고 한다.

알아서 설정하자.

 

 

 

 

 

 

 

 

Timezone 설정하기

Which timezone are you in? ('?' for list) [UTC] ?
Africa/      Chile/       GB-Eire      Israel       Navajo       US/
America/     Cuba         GMT          Jamaica      PRC          UTC
Antarctica/  EET          GMT+0        Japan        PST8PDT      Universal
Arctic/      EST          GMT-0        Kwajalein    Pacific/     W-SU
Asia/        EST5EDT      GMT0         Libya        Poland       WET
Atlantic/    Egypt        Greenwich    MET          Portugal     Zulu
Australia/   Eire         HST          MST          ROC          posixrules
Brazil/      Etc/         Hongkong     MST7MDT      ROK          right/
CET          Europe/      Iceland      Mexico/      Singapore
CST6CDT      Factory      Indian/      NZ           Turkey
Canada/      GB           Iran         NZ-CHAT      UCT
Which timezone are you in? ('?' for list) [UTC]

 

이제 timezone 설정할 차례다.

눈 씻고 찾아봐도 한국은 안보인다 한국은 Asia/에 있다.

 

 

 

What sub-timezone of 'Asia' are you in? ('?' for list) ?
ls: Asia/: No such file or directory
Aden           Chongqing      Jerusalem      Novokuznetsk   Tashkent
Almaty         Chungking      Kabul          Novosibirsk    Tbilisi
Amman          Colombo        Kamchatka      Omsk           Tehran
Anadyr         Dacca          Karachi        Oral           Tel_Aviv
Aqtau          Damascus       Kashgar        Phnom_Penh     Thimbu
Aqtobe         Dhaka          Kathmandu      Pontianak      Thimphu
Ashgabat       Dili           Katmandu       Pyongyang      Tokyo
Ashkhabad      Dubai          Khandyga       Qatar          Tomsk
Atyrau         Dushanbe       Kolkata        Qostanay       Ujung_Pandang
Baghdad        Famagusta      Krasnoyarsk    Qyzylorda      Ulaanbaatar
Bahrain        Gaza           Kuala_Lumpur   Rangoon        Ulan_Bator
Baku           Harbin         Kuching        Riyadh         Urumqi
Bangkok        Hebron         Kuwait         Saigon         Ust-Nera
Barnaul        Ho_Chi_Minh    Macao          Sakhalin       Vientiane
Beirut         Hong_Kong      Macau          Samarkand      Vladivostok
Bishkek        Hovd           Magadan        Seoul          Yakutsk
Brunei         Irkutsk        Makassar       Shanghai       Yangon
Calcutta       Istanbul       Manila         Singapore      Yekaterinburg
Chita          Jakarta        Muscat         Srednekolymsk  Yerevan
Choibalsan     Jayapura       Nicosia        Taipei
What sub-timezone of 'Asia' are you in? ('?' for list)

 

아래에 보면 Seoul이 보인다. Seoul 입력

 

 

이후 URL 및 도메인 관련 설정과 ssh 설정을 모두 Enter하면 된다.

 

 

 

 

 

 

 

disk 설정하기

Enter mirror number (1-90) or URL to add (or r/f/e/done) [1]
Added mirror dl-cdn.alpinelinux.org
Updating repository indexes... done.
Which SSH server? ('openssh', 'dropbear' or 'none') [openssh]
 * service sshd added to runlevel default
 * Caching service dependencies ...
 [ ok ]
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519
 * Starting sshd ...
 [ ok ]
Available disks are:
  sda   (21.5 GB ATA      QEMU HARDDISK   )
Which disk(s) would you like to use? (or '?' for help or 'none') [none] sda
The following disk is selected:
  sda   (21.5 GB ATA      QEMU HARDDISK   )
How would you like to use it? ('sys', 'data', 'crypt', 'lvm' or '?' for help) [?] sys
WARNING: The following disk(s) will be erased:
  sda   (21.5 GB ATA      QEMU HARDDISK   )
WARNING: Erase the above disk(s) and continue? (y/n) [n] y

 

 

순서대로

  1. sda를 입력한다 (어떤 디스크를 쓸 건가요?)
  2. sys를 입력한다 (해당 디스크는 어떤 용도로 쓸 건가요?)
  3. y를 입력한다. (데이터 모두 지울 건가요?)

 

 

 

 

여기까지 하면 설정이 모두 끝나기 때문에 Reboot 하라고 뜬다.

poweroff

 

위 명령어를 입력해 빠져나온다.

 

 

 

 

 

 

가상머신 파일로 사전설정이 모두 끝났으니 더 이상 cdrom은 필요없다.

 

이제 cdrom 없이 가상머신을 부팅한다.

 

qemu-system-x86_64 -machine q35 -m 2048 -smp cpus=4 -cpu qemu64 \
-drive if=pflash,format=raw,read-only=on,file=$PREFIX/share/qemu/edk2-x86_64-code.fd \
-netdev user,id=n1,hostfwd=tcp::2222-:22 \
-device virtio-net,netdev=n1 \
-nographic alpine.img

 

 

 

 

꽤 기다리면 로그인하라고 나온다.

로그인하여 접속되면 제대로 설치된 거다.

 

 

 

 

 

QEMU 외부 접속 허용하기

 

이제 QEMU에서 외부 접속을 허용해야 한다.

아래 경로로 들어가 파일 내용을 좀 수정해야 한다.

 

vi /etc/ssh/sshd_config

 

 

 

 

 

순서대로

PasswordAuthentication yes로 설정

 

PermitRootlogin yes로 설정

# sshd_config
# 여기서 뒷 부분을 모두 지우고 yes로 변경
PermitRootLogin prohibit-password

 

KbdInteractiveAuthentication yes로 설정 후, 주석 해제하기

 

 

 

iptables 2222번 포트 열기

iptables이 없으니 설치한다.

apk add iptables

 

 

 

가상머신에서 2222번 포트를 열어줬으니 iptables에서도 열어야 한다.

어디서 열었냐고?

qemu-system-x86_64 -machine q35 -m 2048 -smp cpus=4 -cpu qemu64 \
-drive if=pflash,format=raw,read-only=on,file=$PREFIX/share/qemu/edk2-x86_64-code.fd \
-netdev user,id=n1,hostfwd=tcp::2222-:22 \  # <<<< 바로 이 부분이다.
-device virtio-net,netdev=n1 \
-nographic alpine.img

 

 

아래 명령어를 입력해 iptables를 열어주면 된다.

iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

 

 

 

 

 

현재 접속된 cmd 창을 끄지 말고 새로 열어 다시 ssh로 접근 시도하면 접속될 것이다.

ssh root@your_password -p 2222

 

 

 

 

 

 

 

 

만약 Permission deny가 뜨면서 뭔가 엄청난 문구가 뜬다면?

 

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:s+ydvnJEGOi4IKvX25EaLhlk3OOk2co6z6zqz+3yUDw.
Please contact your system administrator.
Add correct host key in C:\\Users\\pen40/.ssh/known_hosts to get rid of this message.
Offending ED25519 key in C:\\Users\\pen40/.ssh/known_hosts:7
Host key for [172.30.1.38]:2222 has changed and you have requested strict checking.
Host key verification failed.

 

 

윈도우 기준 ssh 접속 내역을 확인할 수 있다.

C:\users\username\.ssh

 

여기서 이전에 설정해놓은 게 있다면 그 파일들을 모두 지워야 한다.

 

 

 

 

 

만약 Time out이 뜬다면?

 

가상머신이 꺼진 거다.

Termux에서 가상머신을 접속한 커널은 계속 켜놔야 한다.

그래서 QEMU 가상머신 실행은 휴대폰에서 하고 로그인 후,

 

그대로 냅두는 것을 권장한다.

'개인서버만들기' 카테고리의 다른 글

Termux 기본 설정  (0) 2024.12.22
Termux에 대해  (0) 2024.12.22