(rEFInd 와 함께하는) Arch Linux(KDE) 설치/설정

Arch 를 설치해본 지는.. 기록에 따르면 대략 4년쯤 된 듯 하다.
그때에 비하면, 이런 저런 잡지식이 꽤 많이 늘었다. 4년 뒤에 이 글을 보면 또 그런 느낌을 받을 수 있을까.. 얼마나 많은 꽃삽질을 하는지에 달려있겠지.

갑자기 아치가 생각난 이유는.. 얼마 전 Hacker(?) 의 길을 걸은 뒤, 디스크에 자리 잡고 있던 오래된 Kubuntu 19.04 를 대체할 새 OS를 찾았기 때문이다. 처음엔 Tumbleweed 를 선택해서 설치까지 마쳤는데, rEFInd 와 살짝 문제를 보였다. 문제를 회피할 수는 있지만, 굳이 그렇게까지 하며 사용해야할 이유가 없기에, 한동안 잊고 있었던 아치 리눅스에게 기회(?)를 주기로 했다.

아무튼, 이번 글에선 자질구레한 내용은 대부분 건너 뛰고, 굵직한 내용만 간략하게 정리하기로 한다. 이렇게 할 수 있는데는, 결국 그간 배운게 많다는 얘기가 되겠다.
지난 번엔 여러가지 글을 참고했고, 머피 박사님 동영상도 큰 도움이 됐었지만, 이번엔 지난 번 내 글을 기본으로 아치리눅스 설치 문서를 참고했고, 그간 고군분투한 경험을 뼈대로 해서 글을 작성할 예정이다.

** 제목엔 refind 가 들어가있지만, 정작 본문에선 설치법은 언급되지 않는다. 다른 곳에서 이미 설치했다는 가정!
그래야 부트 매니저, EFI 에 대한 길고 지루한 내용을 건너뛸 수 있기에.

그럼, 시작.


설치 미디어 만들기

요즘 세상엔 USB 디스크외에 다른 미디어를 생각하기는 어렵다. 리눅스를 접하고 나서 지금까지 이 작업엔 거의 무조건 dd 를 사용해왔다. 그런데, 아치 문서와 기타 문서를 보니, dd 는 구시대 산물이었던 모양이다.

아치에선 cat 이나 cp 심지어 tee 등을 이용하라고 권장하고 있다. 물론, dd 도 쓰지 말라고 하진 않지만.
다만, cat 이나 tee 는 redirection 을 이용하는데, sudoer 로는 이 작업을 하기가 좀 번거롭다. 꼭 하고 싶다면 sudo -i 로 바꿔서 하는게 편하다.
그냥 sudo 로 하려면 cpdd 가 역시 편하다.

# cp path/to/archlinux-version-x86_64.iso /dev/sdx
# dd bs=4M if=path/to/archlinux-version-x86_64.iso of=/dev/sdx conv=fsync oflag=direct status=progress

앞으론 복잡한 dd 대신 cp 에 집중해야겠다.

아래는, 모두 아치 리눅스 설치 디스크로 부팅한 다음 작업한다.

키보드 자판 설정

기본값은 영문 QWERTY 다. 드보락으로 바꾸려면,

loadkeys dvorak

시스템 시계 확인

인터넷에 제대로 연결된 상태에서, 다음 명령으로 시간을 ntp 서버와 동기화시킨다.

# timedatectl set-ntp true

디스크 구획 나눔(Disk Partitioning)

새 OS 를 설치할 땐 이게 큰 문제다. 지난 번 글에서도 이 부분에 꽤 많은 내용을 할애했었는데, 이번엔 확 줄인다.
기본은 이렇다.

  • 디스크 파티션 테이블 : GPT 사용 (이젠 이게 기본이다. msdos 파티션은 더 이상 쓸 일이 없다.)
  • Boot Manager : rEFInd 를 사용하고, 이미 설치돼 있다고 가정. 즉, EFI 파티션 이미 존재.
  • 파일 시스템 : Btrfs 사용. Sub Volume 은 적절히.

EFI 파티션이 없을 경우, FAT32 파일시스템으로 1GB 정도 되는 파티션을 만든다. 보통은 200~500MB 을 사용하긴 한다. 또, 꼭 첫번째 파티션일 필요는 없는 듯 하지만(즉, /dev/sda1 등이 아니어도 가능), 보통은 첫 파티션에 EFI 를 놓는다.

Btrfs Sub Volume

서브볼륨은, 꼭 만들지 않아도 괜찮지만, 이왕 만들 바에는 제대로 만들어보자.

우분투의 경우, root 와 home 만 서브볼륨을 사용한다. 그리고 그 상황은 대략 다음과 같다.
Btrfs 디스크를 subvolid=5 로 설정하고 마운트한 뒤 살펴보자면.. (이런 걸 Flat 형식이라한다.)

# btrfs subvolume list /mnt/aa
ID 256 gen 134299 top level 5 path @
ID 257 gen 134310 top level 5 path @home

하지만, Tumbleweed 의 경우는 이 구조를 조금 더 복잡하게 세분화한다. 이런 형식을 Nested Sub volume 이라 한다.

# btrfs subvolume list /mnt/cc              
ID 256 gen 6452 top level 5 path @
ID 257 gen 6452 top level 256 path @/home
ID 258 gen 6452 top level 256 path @/var
ID 259 gen 6452 top level 256 path @/usr/local
ID 260 gen 6452 top level 256 path @/tmp
ID 261 gen 6452 top level 256 path @/srv
ID 262 gen 6444 top level 256 path @/root
ID 263 gen 6452 top level 256 path @/opt

@ 를 루트로 하는 상황은 같지만, @home 을 @ 와 동일선상에 놓는 우분투와는 달리, Tumbleweed 는 @ 산하에 home, var 등을 만든다. 정확하게는 @/home, @/var 등. 이렇게 되면 이게 서브볼륨인지 서브디렉토리인지 눈으로는 구분이 되지 않는다.
이런 식으로 서브볼륨/디렉토리를 만들면, 서브볼륨과 서브디렉토리 구조가 동일해서 파악이 쉽기도 하고, 또 그 결과로 snapshot 을 뜰 때도 불필요한 위치를 쉽게 제외할 수 있는 장점도 있다.
또, chroot 시에 따로 하나씩 마운트하지 않아도 된다는 게 뭐니 뭐니 해도 가장 좋은 점이랄까.

여기에, Tumbleweed 는 더더욱 강력(?)하게, set-default 까지 구현해 놓았다.

# btrfs subvolume get-default /mnt/cc 
ID 256 gen 6452 top level 5 path @

이 방식을 쓰면, rEFInd 에서 따로 손을 봐 줄 필요가 없다. 다만, 이게 쓰였는지 모르는 상황이라면, 파티션 구조를 파악하기까지 시간이 좀 걸린다는 단점도 있다.

하여, Tumbleweed 방식을 그대로 가져와서 서브볼륨을 만들어보도록 한다.
다만, 다들 쓰는 @ 에서 벗어나서, 나름대로 새로운 서브 볼륨이름을 주기로 해본다.
그 결과는 대략 이렇다.

# btrfs subvolume list  /mnt/dd           
ID 256 gen 583 top level 5 path root_of_arch
ID 258 gen 583 top level 256 path root_of_arch/var
ID 259 gen 490 top level 256 path root_of_arch/root
ID 260 gen 566 top level 256 path root_of_arch/opt
ID 263 gen 490 top level 258 path root_of_arch/var/lib/portables
ID 264 gen 490 top level 258 path root_of_arch/var/lib/machines

@ 대신 root_of_arch 라는 서브볼륨을 만들었고, 그 산하에 var, root 등을 만들었다.
또, home 디렉토리는 다른 디스크에 이미 사용하던 장소가 있으므로, 거기를 그냥 사용하기로 한다.

서브볼륨을 만드는 방법은 따로 기록하지 않는다. 다만, NoCow압축 문제등, 신경써야할 부분은 있다. 특히나 /var 에는 NoCow 를 사용하는 편이 좋다고는 한다.
그러나.. 당장은 그리 복잡하게 사용할 생각은 없으므로..
적당히 파티션 작업을 해주고 마친다.

Swap file, partition?

커널 5 부터였나, Btrfs 에서도 스왑파일을 사용할 수 있다. 그러나, 역시 NoCow, 압축등을 신경 써 줘야한다.
이런게 귀찮고 복잡하다면, 그냥 스왑파티션을 쓰면 된다.

만약 다른 시스템과 공유하는 스왑파티션이 있다면 그걸 그냥 추가해주면 된다.

# swapon /dev/sdXY

만약 스왑파티션이 없다면, 적절한 크기로 파티션을 만들고, 다음 명령으로 초기화를 해준다.

# mkswap /dev/sdXY

root 디렉토리 구성

Tumbleweed 식으로 했다면 그냥 root 서브볼륨을 /mnt 로 마운트 해주면 된다.
만약, / 와 home, var 등을 평행(Flat)하게 만들었다면(우분투가 취한 방식), /mnt 로 마운트할 때 좀 더 복잡하게 해줘야 한다. 비슷한 방식을 우분투 서버 Btrfs 설치에서 찾아볼 수 있다.

간단히 말하자면, 먼저 root 서브볼륨을 /mnt 마운트 한 뒤, 각각 해당 디렉토리에(예를 들어 /home 은 @home 서브볼륨으로.. 등등) 적절한 서브볼륨을 마운트시켜줘야 한다.
최초 설치 시 한번만 해주는 일이긴 해도, 손으로 하나 하나씩 해주기엔 너무 번거로운 일이다.

따라서 Nested 방식을 택했다.

위에서 언급했지만, 이미 EFI 파티션및 부트 관리자는 존재한다는 가정이므로, /boot/efi 는 따로 고려할 필요가 없다.

시스템에서 /(root 디렉토리)로 사용할 파티션을 적절한 곳에 마운트한다. 꼭 /mnt 가 아니고 /target 등도 된다. 여기선 그 파티션이 /dev/sda3 라고 가정한다.

# mount /dev/sda3 /mnt -o subvol=archlinux_root

그래도 혹시나 하여.. /boot 를 따로 만들었다면, /boot 도 마운트 해줘야 하고, EFI 설치가 필요하다면, 역시 따로 마운트 해줘야 한다.
아래는, /boot 를 /dev/sda2 에, EFI 를 /dev/sda1 에 설정했다고 가정했다.

# mkdir /mnt/boot
# mount /dev/sda2 /mnt/boot
# mkdir /mnt/boot/efi
# mount /dev/sda1 /mnt/boot/efi

또, /home 을 다른 드라이브나 서브볼륨을 사용하기로 했다하더라도, 지금 여기서는 굳이 /mnt 밑에 마운트할 필요는 없다. Arch 는 Ubuntu 등과는 달리 설치시에 일반 사용자 계정을 만들지 않으므로, 당장은 필요하지 않다.

마지막으로, 위에서 하지 않았다면 swap 도 제대로 설정.

# swapon /dev/swap_partition

미러 선택?

/etc/pacman.d/mirrorlist 를 편집해서 대한민국 서버를 선택하는게 좋다고 하는데.. 내가 했을 땐 한국 서버가 잘 보이지 않았다. 안보이면 그냥 기본값 그대로.

설치 및 설정

기본 파일(꾸러미) 복사

/mnt 디렉토리로 기본 파일을 복사한다!

# pacstrap /mnt base base-devel linux linux-firmware dhcpcd

예전엔 base 꾸러미만 설치해주면 됐는데, 이젠 linuxlinux-firmware 까지 필요해졌다.
만약 피가 뚝뚝 떨어지는(?) 신선한 커널이 아닌 lts 를 선호한다면, linux 대신 linux-lts 를 택한다.

** 블루투스를 써야한다면 lts!
현재 5.15 커널에선 블루투스 문제가 발생한다.
피해가는 방법은 찾질 못했고, 대신 lts 를 쓰면 해결된다.
다만, lts 를 설치하면 nvidia-lts 도 설치해야 하고, refind 도 손을 봐줘야만 한다.

dhcpcd 를 설치하지 않으면 넷웍이 불가능해진다.
만약, dhcpcd 를 여기서 설치하지 않아서 부팅한 Arch 에서 넷웍을 사용할 수 없게 됐다면, 다시 설치 디스크로 부팅한 다음 위 작업을 반복하고, pacstrap 으로 dhcpcd 만 설치해주면 된다.

fstab 설정

다음 명령을 내려 현재 디스크 상태를 시스템 fstab 으로 복사한다.

# genfstab -U /mnt >> /mnt/etc/fstab

저 파일을 열고, 이상이 없는지 확인한다.
만약, /home 등을 추가할 필요가 있다면, 지금 넣어준다.

이제, chroot(arch-chroot) 을 써서 몇가지 세부 설정만을 해주면 이 작업의 끝을 볼 수 있게 된다.

arch-chroot 및 세부 설정

chroot

# arch-chroot /mnt

그냥 chroot 명령도 있는데, 이렇게 하게되면 /proc, /sys, /dev 등도 따로 mount(bind) 해줘야 한다. 아마도 arch-chroot 은 이 작업들을 자동으로 해주는 듯 하다.

아래 명령은 모두 chroot 이후에 수행한다.

시간대 설정

# ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
# hwclock --systohc

Locale 설정

/etc/locale.gen 을 편집하여, en_US.UTF-8ko_KR.UTF8 을 주석해제하고, locale-gen 실행.

locale-gen

/etc/locale.conf 을 편집(없으면 생성)하여, 다음 행을 추가.

LANG=en_US.UTF-8
LANG=ko_KR.UTF-8

자판 설정

/etc/vconsole.conf 을 편집(생성)하여, 드보락 키보드 추가.

KEYMAP=dvorak

호스트명 설정

/etc/hostname 을 편집/생성하여, 적절한 호스트명을 명명.

Initramfs?

mkinitcpio 는 굳이 하지 않아도 된다.

root 사용자 비밀번호

passwd 명령으로 비밀번호를 생성한다.

이걸로 끝. 이제 Arch Linux 로 부팅할 수 있는 상태가 됐다.

KDE Plasma 설치

KDE 설치는 It’s FOSS 의 도움을 받았다.

시스템 부팅 후, 일단은 root 로 로그인 한다. (아직 사용자를 추가하지 않았으므로 그럴 수밖에 없다.)

일반 사용자 추가

현재 root 가 유일한 사용자이므로, 일반 사용자를 추가하고, password 역시 부여한다.

# useradd -m nemonein
# passwd nemonein

** KDE Neon 과 디렉토리를 공유한다면..?

KDE Neon 이 왜 그런지는 모르겠지만, 지금까지 써왔던 리눅스 배포판 중, 유일하게 gid 를 1000 이 아닌 1001 로 설정한다. 1000은 sambashare 차지다. 따라서 같은 디렉토리를 마운트해서 사용한다면, gid 가 다르기 때문에 사용자명이 아니라 그냥 1000/1001 로 표시된다.
그대로 써도 되긴 하지만.. 어느 한쪽을 바꿔주든가, 양쪽을 모두 동일하게 바꿔주든가 해야 눈이 편해진다.
gid 를 바꿔준 뒤에는, 일반 사용자를 이 그룹에 참여하게끔 바꿔줘야 한다. 간단하게 /etc/passwd 에서 gid 항목을 바꿔줄 수 있다.

일반 사용자에게 관리자 권한을 부여하여, sudoer 로 만든다. (더불어 vim 도 설치)

pacman -S sudo vim

visudo 를 사용하여 사용자를 sudoer 로 추가.
root ALL=(ALL) ALL 아래에 사용자명 ALL=(ALL) ALL 과 같이 추가한다.

EDITOR=vim visudo

# 추가
nemonein ALL=(ALL) ALL

또, wheel 그룹을 활성화한 후 현 사용자를 wheel 그룹에 참가시켜야 KDE 관리자 권한을 승인해줄 수 있다.
역시 visudo 에서 수정해줘야 한다. 기본값으로 주석처리가 되어 있는데, 주석을 지운다.

%wheel ALL=(ALL) ALL

마지막으로, 현재 사용자를 wheel 그룹에 추가.

sudo usermod -aG wheel nemonein

이제, KDE Partition Manager 등, 관리자 권한이 필요한 프로그램을 실행할 때 현 사용자 ID 의 password 로 root 권한 취득이 가능해진다.

root id 사용 불가능하게.

Ubuntu 나 기타 다른 배포판들처럼, root 로는 로그인이 되지 않게끔 바꿔준다.
이 내용은 Arch 문서에도 있고, 나도 정리한 적이 있다.

sudo passwd -l root

KDE Plasma 설치

Wayland 는 말고, 그냥 X 로만 설치한다.

# pacman -S xorg plasma-meta kde-applications noto-fonts-cjk noto-fonts-emoji packagekit-qt5

아치 문서 첫 항목에서 plasma-meta 를 언급하고 있다. plasma-meta 와 plasma 가 있는데, 흠.. 차이는 세세한 설정을 하느냐, 아니면 그냥 뭉뚱그려 설치하느냐에 있는 듯. 그냥 메타를 선택했다.

나눔 글꼴은 꾸러미로 제공되지 않는 듯 하다.
대신 AUR 로 설치는 가능한데, 글꼴이 있다면 그냥 복사해줘도 될 듯.

** 글꼴 위치

예전엔 ~/.fonts 에 넣어주면 됐었지만, 지금은 ~/.local/share/fonts 라고 한다.

아울러, 요즘은 거의 필수로 사용되는 noto-fonts-emoji 도 기본 설치해주는게 좋다. 이게 없으면, 크로뮴계열에선 글꼴이 네모로 표시되는 경우가 있다. 난 하키 모양이 제대로 표시되지 않아서 알게됐다. (또는, 유튜브에 가도 무수한 네모를 볼 수 있다.) 이상하게도, 파이어폭스에선 저 글꼴 설치없이도 제대로 나왔다. (참고로, 저 문자는 U+1F3D2 로 입력할 수 있다.)

** Noto 글꼴 처리

저대로만 설치하면 의존성 문제로 noto 글꼴(cjk 말고)이 자동 설치된다. 세상 온갖 언어를 한두 꾸러미에 모두 욱여넣다보니 글꼴을 고를 일이 있을 때 너무나도 긴 목록 때문에 짜증날 때가 있다. 이럴 때를 위해, 이 글꼴들을 적절히 안보이게 처리할 수 있다.

설치가 끝나면 다음 두 서비스를 자동실행되게끔 해줘야 GUI 로 바로 진입 가능해진다.

# systemctl enable sddm.service
# systemctl enable NetworkManager.service

NVDIA 드라이버 설치및 설정

설치한 커널에 따라 적절한 nvidia 꾸러미를 선택한다. linux 에는 nvidia 를, linux-lts 에는 nvidia-lts 를.

sudo pacman -S nvidia
sudo pacman -S nvidia-lts

nvidia-settings 를 실행하고, Force Composition Pipeline 등을 설정한 후, Save to X Configuration File 로 X 설정을 저장할 필요가 있는데.. 이게 권한 문제로 원활히 되질 않는다.
기본값은 /etc/X11/xorg.conf 인데, 여기로는 저장이 안된다. 우분투 계열에서는 이럴 때 패스워드를 입력한 뒤 권한 상승이 되게끔 해놨는데, 아치에선 그게 되지 않는다. 되게끔 하는 방법도 있을텐데.. 잘 모르겠다.

따라서, 그냥 일단 아무데나 저장을 한 뒤, 다음 위치로 옮긴다.

sudo cp ~/xorg.conf /etc/X11/xorg.conf.d/20-nvidia.conf

예전엔 xorg.conf 로 저장했으나, 최근엔 저 위치에, 저런 파일명을 권장한다고 한다.

그 외 몇가지 더.

  • 수직주파수(Reflesh Rate) : 적어도 내가 해본바에 따르면, nvidia-settings 에서 지정한 주파수는 저장이 되지 않는다. KDE 설정 – 디스플레이 설정 에서 해줘야 한다.
  • HiDPI 및 다중 모니터 환경 : HiDPI 도 역시 KDE 설정에서 해야 한다. 다만, 다중 모니터 환경에서 서로 해상도가 다를 때, X 는 달리 지정이 불가능하다. 편법(xrandr)으로 할 수는 있는데.. 며칠 써보고는 있지만 이렇게해야할지 좀 애매하다. 다른 글에서 정리할 수 있길.

SDDM 자판 설정

SDDM 로그인 화면에서 기본값인 US QWERTY 로만 비밀번호를 입력할 수 있게 돼 있다.
이걸 원하는 자판으로 바꿔주려면,

sudo localectl set-x11-keymap 'dvorak'

이렇게 하면 된다.
이 내용 역시 Arch 문서에서.

ssh 로그인 자동화

이전에 쓴 글 하단 참고.

소리가 나지 않는다?

위에서 plasma-meta 를 선택했다면, 하위 의존성으로 인해 결국 pipewire 가 설치된다. 복잡한 문제는 넘기고, 이건 결국 pulse audio 를 대체하는데, 아직 완전하지는 못한 모양이다.

아무튼, 음향 재생에 문제가 없다면 그냥 넘겨도 되지만, 문제가 있다면, pipewire-pulse 를 설치해보는 게 좋다.

sudo pacman -S pipewire-pulse

이 내용은 바로 아래와 연결된다.

영상/소리(유튜브 등) 재생에 문제가?

위에서 처럼, 아예 소리가 나지 않거나, 영상 재생에 문제가 있다면, 피같은 꽃삽질기 참고.
해법은 역시 pipeware-pulse 설치다.

블루투스 설정

다른 글 참고하여 설치/설정.

REISUB 설정

우분투에는 이 값이 176 으로 설정되어 있는데, 아치에는 16 이다.

$ cat /proc/sys/kernel/sysrq                       
16

이 상태에서는 재부팅이 되지 않는다.
우분투와 같은 상태로 만들고 싶다면, 다음을 /etc/sysctl.d/90-magic-sysrq.conf 에 저장한다.

kernel.sysrq = 176

우분투에선 /etc/sysctl.d/10-magic-sysrq.conf 이었는데, 여기선 90 으로 바뀌었다.
이유는 아치 문서에 나와있는데, 간단히 정리하면 이렇다.

아치에선 /usr/lib/sysctl.d, /etc/sysctl.d 이 두 디렉토리를 systemd 설정파일 보관소로 사용한다. 두 디렉토리간 우선순위가 있지는 않은 듯 하다. 다만, 먼저 설정된 값이 나중에 설정된 값에 의해 지워지는 형식을 갖고 있다.

기본값이던 kernel.sysrq = 16 은 /usr/lib/sysctl.d/50-default.conf 에 명시돼 있다. 이 값을 176 으로 바꾸기 위해선, 저 파일을 직접 수정하는게 아니고, 50 보다 큰 값으로 대체(Overriding)하는 방식이 권장된다.
따라서, 90 이나, 99 등 50보다 큰 번호를 붙이고, /etc/sysctl.d 에 넣어주면, 나중에 설정한 값이 효력을 갖게 된다.

시스템 벨 설정

여기를 참고하여.. xset b off.xprofile 에 추가.

구글 크롬, vim 등 설치

자유로운(?) ArchLinux 는, 기본 저장소에 구글 크롬을 보유하고 있질 않다. 저작권 문제가 있는지는 모르겠으나..
이를 위해선 사용자 저장소를 추가해줘야 한다. aur 도 있긴 한데, 자동 판올림을 위해선 저장소 추가가 좋다.

herecura 저장소는 꽤 유명한 곳으로 보이는데, 상당히 많은 꾸러미가 관리되고 있다.
저장소를 추가하려면 /etc/pacman.conf 에 다음 내용을 덧붙인다.

# vim, google-chrome 등등
[herecura]
Server = https://repo.herecura.be/$repo/$arch

이렇게 추가한 사용자 저장소와, 공식 저장소간 꾸러미 충돌이 있을 수도 있다. 즉, 같은 이름 꾸러미가 여기에도 저기에도 있을 수 있다는 얘기인데, 이럴 때는 pacman.conf 상위에 위치한 곳에 있는 꾸러미가 설치된다고 한다.

sudo pacman -S google-chrome gvim

gvim 을 쓸 생각은 아니지만, 터미널에서 vim 을 쓸 때 글자 복사 문제(이건 좀 더 공부가 필요..)때문에 gvim 을 설치해야만 했다.

Wine

공식 꾸러미로는 wine-staging 밖에 없다. stable 은 aur 로 있긴 한데, 현재 빌드에 문제가 있다. 바로 잡을 방법은 있는 모양이지만, 괜히 건드리기도 귀찮고 해서, 그냥 staging 으로 간다.

먼저 multilib 저장소를 열어주고, wine 꾸러미를 설치하면 된다. 문서에는 Wine Stable 과 Wine Staging 으로 나뉘어 있다고 되어 있지만, 현재(22.01) Wine 은 Wine Staging 과 동일하다.

끝?
아직.. 계속 추가될 예정. 다음 예정은 aur 내용 정리.

Author: 아무도안

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