----->>>>

.bashrc 파일이 없을때 복구하기

IT 등/POGOPLUG 2021. 10. 3. 20:32
반응형

가끔 예전 리눅스나 계정 생성 과정을 잘못 만진 경우 계정은 생성되지만 부속 파일들이 세팅되지 않을 경우가 있다. 예를들어 .bash_profile 이나 .bashrc 등.

그냥 잘 쓰다가도 스크립트를 만진다던가, alias 를 만지려할때 저것이 없으면 당황하기 쉽다.

어차피 시스템 공통으로 쓰이는 /etc/bashrc 파일은 존재할테니 각 계정별 파일만 만들어주면 된다.

.bashrc 파일을 생성하고 그 안에 내용을 넣으면 되는데, 가끔 그게 적용이 되지 않을때가 있다. 저 위에서 말한 .bash_profile 파일이 생성되지 않아서이다.
profile 파일의 이름은 시스템마다 다르다.

.bash_profile 인 경우가 있고 .profile 인 경우도 있다.

그때는 해당 파일을 생성하고 아래 내용으로 만들어주면 된다.

# ~/.profile: executed by the command interpreter for login shells. 
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login 
# exists. 
# see /usr/share/doc/bash/examples/startup-files for examples. 
# the files are located in the bash-doc package. 

# the default umask is set in /etc/profile; for setting the umask 
# for ssh logins, install and configure the libpam-umask package. 
#umask 022 
# if running bash 
if [ -n "$BASH_VERSION" ]; then 
    # include .bashrc if it exists 
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc" 
    fi
fi

# set PATH so it includes user's private bin if it exists 
if [ -d "$HOME/bin" ] ; then 
    PATH="$HOME/bin:$PATH" 
fi

 

반응형

설정

트랙백

댓글

라즈베리파이로 홈서버 만들기

IT 등/라즈베리파이 2020. 12. 14. 00:38
반응형

사실 이 글이 가장 앞에 있어야 하는데 라즈베리 관련 여러 글을 쓰고서야 설치 얘기를 하게되었다. 그게, 처음 설치 후에 갑자기 라즈베리가 동작하지 않아 애태우다가 글 쓸 타이밍을 놓쳐버렸었다.

각설하고,

집에서 영화보고, 파일 관리하는데 꼭 필요한게 NAS다. 그래서 그걸 Pogoplug를 해킹해서 리눅스를 만들어 굴린게 벌써 7년 전이다. 그동안은 archlinix로 잘 썼었다. 사실, 집에서 리눅스를 굴린다고 해 봐야 토렌트 다운로드을 위해 트랜스미션만 잘 돌아가면 되는 것이었으니까.

그런데, 사람의 욕심이라는게 참… MySQL을 깔고 mysqldump를 하는데 잘 안된다. 그 이유가 뭔고하니 메모리 부족이란다. 그래 256M 정도니… 인정해 줄께.

VitrualHosting 하는 것도 워낙 저가로 했더니 mysql은 설치가 되지만 mysqldump로 조금만 큰 데이터를 넣으려 해도 실행이 되지 않았었다. 그런데 그 해결책이 생긴 것이다.

그래서 라즈베리파이를 구매했다. 기존에 라즈베리파이4에 4G 메모리 버전이 있는 것은 알았는데, 신제품으로 메모리 8G 버전이 나왔다는 것을 보고는 홀리듯 구매해버렸다.

라즈베리파이 스펙을 살펴보자.

라즈베리파이4 8GB가 되면서 CPU는 그대로지만 RAM이 늘었고 네트워크가 향상되었다.

이정도로 스펙을 알아봤으니 배송받은 라즈베리파이 외양을 본다.

빨간(정열적인?) 박스에 본체와 거기 붙일 방열판이 왔다. 방열판 기본 내장인 것으로 보아 열이 많이 나는가 보다.

포장을 뜯고 내용물을 꺼내봤다. 단일 기판에 모든 것이 조밀하게 들어있는데 CPU 및 랜포트 등 필요한 것은 다 있는 것 같다.

뒷면을 뒤집어 보자. 아하, 마이크로SD 꽃는 곳이 아래에 있었다. 거기 끼우니 딱 맞네.

열이 많이 난다고 하니 같이 포장되어 온 방열판을 붙이자. 부품도 몇개 안되지만 그 위에 붙이니 크기도 딱 맞는다. 추가로 케이스를 구매했는데 저 방열판은 크기가 맞지 않아 떼어버려야 했다.

라즈베리파이를 위해 어떤 OS를 깔아야 할까. 리눅스를 다룰 줄 알다보니 당연히 내 선택은 Ubuntu Server였다. 제공되는 버전은 20.04 LTS다. 늘 터미널로만 쓰다보니 X-window 연결은 고려대상 밖이다. 또한 8G 메모리이니 64bit 버전을 사용한다.

우분투 서버 설치를 위해 설치 툴인 winimager32와 우분투 이미지를 다운로드 받았다. 우분투 이미지는 압축시에 670메가 정도 밖에 되지 않았지만 압축을 푸니 3G정도 사이즈가 된다. 저 압축 푼 파일로 작업을 할 것이다.

파일과 MicroSD가 준비되면 이미지 툴로 구우면 된다. 기존에 준비된 이미지를 굽는 것이기 때문에 시간도 별로 걸리지 않는다.

굽고나면 그림처럼 완료 메시지가 뜬다.

그리고 윈도우에서 리눅스 이미지를 구웠음에도 불구하고 뭔가 파일 목록이 보인다. 그것이 뭔고 하니 부팅 이미지다.
아래 그림에서 처럼 60MB 가량읔 FAT32인 부분이 있어서 윈도우에서도 일부 보이게 된다.

이제 설치를 마쳤으니 SSH로 로그인 할 수 있다. 로그인 해 보자. 그러면 초기 세팅이 UTC로 되어 있음을 알 수 있다.

이것을 KST로 바꿔보자. 터미널에서 dpkg-reconfigure tzdata 라고 입력하면 TimeZone을 고를 수 있는 화면이 나오고, 거가서 "Asia/Seoul"을 골라주면 된다. 이 작업은 root 권한으로 해야 한다.



반응형

설정

트랙백

댓글

라즈베리파이 케이스에서 나는 고주파음 해결

IT 등/라즈베리파이 2020. 11. 10. 01:21
반응형

라즈베리파이를 설치하고, 기판 그대로 두기 뭐래서 케이스를 씌웠다.

발열 많은 라즈베리에 팬달린 케이스를 씌워놓으니 40도 정도로 유지된다.

저렇게 있으니 좋은 것도 있지만 저 작은 팬에서 나는 소리가 그렇게 귀에 거슬릴 수가 없었다. 어떻게 해결할 수 없을까.

그때, 쓰레기를 치우다 라즈베리파이 전원 어댑터 종이 케이스를 봤다. 어라? 크기가 비슷하네. 잘하면 저 케이스를 덮어 씌울 수도 있을 것 같다. 거기다 전원 케이블은 종이에 구멍 뚫으면 그만이잖아.

종이 박스로 방음벽을 만들어보자.

모양이야 이러면 어떻고 저러면 어떠하리.


오호~ 그럴듯 하다. 무엇보다 팬소리가 아예 들리지 않는 것은 아니지만 많이 줄었다.

그런데! 기판 온도는 어떻게 되었나.

삽시간에 10도 정도가 올라간다. 하루정도나 버틸 수 있을까.
살짝 머리를 굴려본다. 저렇게 상태가 좋지 않은 것은 팬으로 빨아들인 공기를 배출할 곳이 없어서이고, 팬 소리만 가리면 될 것 아닌가.

공기 배출구 쪽을 찢어주자.

그랬더니 그것만으로 온도가 떨어진다.

하루 정도 계속 라즈베리파이를 켜보고 다시 로그인하여 온도를 확인해봤다.

이번에는 44.3도다. 만족스럽네. 최소한 설치된 반대편 소파에서는 팬 소리가 잘 들리지는 않는다.

지저분한 종이만 정리해주고 마무리해야지.

 

반응형

설정

트랙백

댓글

라즈베리 우분투 20.04를 넓은 디스크로 복제하기

IT 등/라즈베리파이 2020. 11. 9. 00:35
반응형

라즈베리에서 16G micrSD에 ububtu 20.04를 사용하고 있었다.

그러다가 쿠팡에서 충격적인 가격의 microSD를 보게되었다.

12G 마이크로SD가 5000원 내외인데(헐… 이건 왜이리 싸졌담. 32기가 짜리가 몇만원 했던 것 같은데) 그 열배에 해당하는 용량이 15000원이 채 되지 않았다. 라즈베리 파이가 블랙박스처럼 하드한 환경이 아니니 굳이 비싼것을 쓸 필요는 없었고.

커뮤니티의 어떤 회원의 도움말을 통해 SD를 바꾸는데 다시 세팅할 필요 없이 복제할 수 있는 방법이 있다는 정보를 입수했다. 그럼 쉽지.

winimage라는 프로그램을 쓰면 된단다. 프로그램 홈페이지에 가서 보니 linux도 지원한다네.(http://www.winimage.com/winimage.htm)

쉐어웨어이긴 하지만 받아서 설치한다. 설치하고 나면 이런 썰렁한 프로그램이 뜬다.

원래 목적대로라면 16G 마이크로SD→128G마이크로SD로 복구되면 좋겠지만 안타깝게도 microSD에서 winimage 포맷(vhd)로 이미지를 뜨고, 그걸 다시 복원해야 한다. 어차피 백업이미지도 떠 놔야 했으니 그대로 실행.

이미지를 뜰때는 옵션이 있는데 Fixed Size로 설정했다. 이유는 모르겠지만 Dynamic하게 변경되는 것 보다 안정적일 것 같아서하지만 그리 했다.

16G짜리에서 이미지를 떴더니 14G정도 되는 이미지가 생겼다.

sd카드 크기 그대로 이미지가 생긴건데, 저걸 보관해야 하니 압축을 해 본다.


어차피 16G의 많은 공간이 빈 공간이었으니까.

그랬더니 와우! 무려 1.4G쯤으로 압축되었다. 백업이미지를 보관해 두기 위한 디스크는 많이 절약되겠네.

가만, 이미지 만들때부터 Dynamic Size로 했으면 이미지가 처음부터 1.4G로 나오지는 않았을까. 그래도 뭐, 색터채로 복사하는 거라던데, 압축해서 보관해도 복원만 잘돼면 되지.

위 vhd 이미지를 사용하여 128G SD에 복원하고 복원이 잘 되었는지 부팅을 해 보았다.

로그인도 잘 되고, SSH fingerprint도 그대로 유지되었다. 내용을 복제하고 디스크만 바꾼것이니 당연할 수도.

디스크 크기를 바꿨으니 파티션 크기도 바꿔줘야지. 디스크 크기를 확인한다. 명령어는 'df -h'

어? 난 아무것도 손댄게 없는데 저절로 루트 파티션 크기가 늘어났다. 어떻게 된거지? 암튼 128G용량을 다 쓰는 것 같기는 하다.

그럼 물리 디스크를 어떻게 쓰는지 보기위해 fdisk를 해 보자. 명령어는 root에서 'fdisk -l'

다시 잘 보니 SD가 쓰는 부분 중에 booting을 담당하는 첫 256M는 FAT32이고 나머지가 리눅스 파티션으로 잡혔다. 아마 라즈베리파이용 우분투 자체가 저리 구성되어 부팅 파티션을 제외하고 나머지는 저절로 잡혔나보다.

이리되면 공간을 확보했으니 NAS를 위해 따로 하드를 연결하지 않아도 될 지 모르겠다. 충분히 공간이 생겼으니까.

그보다, 우분투 내장 SAMBA인 4.11에 Win10이 붙지를 않는다. 다른 리눅스의 3.8은 잘 붙는데. 이걸 해결해야겠다.

반응형

설정

트랙백

댓글

net::ERR_CACHE_MISS 에러

IT 등/Flutter 2020. 10. 6. 13:03
반응형

거 참, 팔자에 없는 앱개발을 해 보다보니 별 에러를 다 만난다.

이런거.



웹뷰를 쓰는 간단한 어플을 만들었는데, 실기기를 쓰지 않고 에뮬레이터로만 테스트 하다가 플레이스토어에 올렸더니 별 희안한 에러가 난다.

웹뷰를 쓰는데 인터넷 권한을 주지 않았다는거지.

흠, 플러터는 인터넷 권한은 기본으로 들어간다던데…

그래서 AndroidManifest.xml 파일에 권한 추가하는 명령어는 넣어줬다.

<uses-permission android:name="android.permission.INTERNET" />

반응형

설정

트랙백

댓글

안드로이드 apk, appbundle 버전 올리기

IT 등/Flutter 2020. 10. 2. 17:38
반응형

요새 flutter로 앱 만드는데 한참 재미붙이고 있는데, java가 아니고, Android Studio가 아닌 마이너한 방법을 쓰다보니 문서화가 약해서 참 어렵다. (그나마 더 마이너한 RAD Studio를 썼으면 얼마나 더 어려웠을꼬...)

플레이스토어 개발자 등록을 해 두고 테스트 앱을 올리고 있는데, 앱번들을 한번 올렸더니 "이미 버전 코드가 1인 APK 또는 Android App Bundle이 있으므로 다른 버전 코드를 사용해야 합니다." 라는 에러를 내며 등록이 안된다.

 

동일 버전의 apk나 appbundle을 업로드하면 나는 에러

 

머리를 좀 굴린답시고 build.gradle을 봤더니 거기 버전코드가 있었다.

하지만, 그건 변수로 받아올 값이 없을 때 얘기고, local.properties를 참조하는 것 같았다.

local.properties를 고쳤지만 이상하게 고쳐도..고쳐도 다시 원복된다. 뭔가 이상해.

늘 그렇듯이 답은 스택오버플로우에 있었다.

stackoverflow.com/questions/53570575/flutter-upgrade-the-version-code-for-play-store

Flutter: upgrade the version code for play store

i have published an application on the play store with flutter, now i want to upload a new version of the application. I am trying to change the version code with: flutter build apk --build-nam...

stackoverflow.com

딴데 손대지 말고 pubspec.yaml 파일을 고치면 된단다. 그 파일에 있는 version: 1.0.0 에 숫자를 더해주면 된다.

 

 

덧. 예전에 코딩할때는 전체를 다 암기했는데, 이제는 이런 설정사항 하나까지 다 블로그에 기록해놔야 하다니... 한편으로는 서글프네.

반응형

설정

트랙백

댓글

flutter로 개발한 앱을 플레이스토어에 올릴때 API 레벨이 맞지 않다고 나올 경우…

IT 등/Flutter 2020. 9. 20. 22:53
반응형

최근, flutter에 관심이 있어서 간단한 앱을 끄적이고 있었다.

AVD로 테스트 하고서 배포 테스트를 하려니 플레이스토어 계정도 파야 했었다. 25$ 들었고…

그런데 개발하는 것보다 플레이스토어 콘솔 사용법이 더 어려웠다. 또 UI는 왜 바꾸는지…

인터넷에 있는 모든 자료는 구버전 UI 기준인데 새로 바꾼 UI에서는 그 내용을 찾을 수 없었다.

무엇보다, flutter로 앱 빌드했을때 targetSDK 버전이 기본적으로 28로 되어 있어서 아무런 수정 없이 업로드하면 안드로이드 API 수준이 맞지 않는다고 나온다(정확한 오류메시지는 기억 불가)

안드로이드 API를 29 이상으로 올려야 하는데, 인터넷을 아무리 검색해도 안드로이드 스튜디오에 관한 얘기만 있을뿐, 내가 쓰는 IntelliJ에 관한 얘기는 없다.

pycharm을 쓰며 그 인터페이스에 익숙해 있어서 인텔리제이를 골랐는데 이럴때는 더 힘드네.

결국 해결책을 찾았는데, 그 프로젝트의 android\app 디렉토리에 build.gradle 파일이 있는데 그 내용 중 android { } 패러그래프 안쪽의 compile SDK 버전과 targetSDK 버전을 29로 바꿔주고 다시 build를 수행하면 된다.

 

반응형

설정

트랙백

댓글

포고 또 한대 들이다.

IT 등/POGOPLUG 2018. 9. 15. 19:15
반응형
예전… 아마 2013년 부근인가보다. 그때부터 집에 NAS 삼아 POGOPLUG E02를 한대 굴리고 있었는데, 최근에 한대 더 입양했다.

기존 것은 Archilinux 였는데, 최근에는 그 자료가 잘 없고 데비안 관련 자료가 많아 그걸로 하기로 했다.

하지만 이미지 파일이 잘 없어 모든 패키지가 깔린 예전 이미지를 활용하려 했지만 더이상 업데이트가 지원되지 않아 새로 바닥부터 깔아야 한다. 그럼 갈 길이 먼데…

그래도 최근에 구한 v4용 이미지로 usb를 만들고 업데이트를 하니 E02에서 jessie까지 업데이트가 되고 동작도 된다.


가지고 있는 이미지(usbit으로 구성 가능한 이미지)에서 jessie 까지 업데이트 하는 방법은 다음과 같다.

일단, usbit을 사용해서 초기 이미지 복원

Acronis Disk Director를 사용해서 사용 가능 디스크용량을 최대로 Resize

그리고 swap 파일 생성(swap 파티션이 아니다. swap 파일을 생성하여 swap 메모리를 잡는다.)

~$ dd if=/dev/zero of=/opt/swap bs=1M count=512
~$ mkswap /opt/swap
~$ swapon /opt/swap

재부팅시에도 스왑이 자동으로 잡히게 하기 위해 fstab에 다음 내용을 추가한다.

# Swap
/opt/swap      none            swap    sw                0       0

이 작업 후 콘솔에서 top 명령을 실행하면 스왑메모리가 잡혀 있음을 확인할 수 있다.

그 후 다음 작업을 실시한다

~$ apt-get update
~$ apt-get dist-upgrade

업그레이드가 다 끝났으면 데비안의 버전을 확인해 보자

~$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
NAME="Debian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=debian
HOME_URL="http://www.debian.org/"
SUPPORT_URL="http://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

데비안 리눅스 Version 8, Jessie로 업그레이드 되었다.

그러면 다음에 할 일은 NTFS 파티션을 인식시켜야 한다.(외장하드에 파일을 저장할 수 있게해야 하므로) 

ntfs-3g 모듈을 깔아서 해결하도록 하자.

~$ apt-get install ntfs-3g

설치가 완료되면, 마운트 포인트를 생성하고 외장하드를 마운트한다.

~$ mkdir /media/extdisk
~$ mount -t ntfs-3g /dev/sdb1 /media/extdisk/

일반적으로는 재부팅시 자동 마운트를 위해 /fstab 에 등록하여 사용하지만 포고플러그는 네트워크로만 접속 가능하고 Single Mode(윈도우의 Safe Mode 유사)가 없기때문에 fstab의 내용이 잘못되면 부팅이 불가능해져서 아주 난감한 상황에 빠진다.

그래서 자동 마운트 하는 프로그램을 설치하자.

~$ apt-get install usbmount

여러모로 쓸모가 많은 cron을 설치하자

~$apt-get install cron

그리고 KST로 시간대를 바꾸자

~$su (수퍼유저로 로그인 후)
~$ ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

시간 동기화 프로그램을 설치하고
  
~$ apt-get install rdate

크론에 시간 동기화 작업을 걸어주자
  
~$ crontab -e
0 5 * * * /usr/bin/rdate -s time.bora.net #Time Sync every day at 5 a.m

root로 직접 로그인하는 것은좋은 방법이 아니다. 일반 사용자로 접속 후 수퍼유저 권한을 얻도록 하자.

그러자면 일반 사용자를 생성 후, 자동로그인 설정까지 한다. 

~$ adduser <user_id>
~$ su <user_id>
~$ ssh-keygen -t rsa
~$ copy authorized_keys .

자 이제 대망의 bind9를 깔아보자.

~$ apt-get install bind9 bind9-doc bind9utils dnsutils

설치가 완료되면 DNS 세팅을 한다. 

~$ copy db.inbox.cf . #새로운 domain db 파일 복사
~$ vi named.conf.local # domain db 파일이 반영되도록 설정
zone "inbox.cf" {
        type master;
        file "/etc/bind/db.inbox.cf";
 }; #파일 내용에 추가
~$ service bind9 restart # bind 재기동

덧. 아무래도 USB에 리눅스를 설치해서 굴리다보니, 잘 깨져서 부팅이 안되는 일이 종종 있다. 그런데 이렇게 보고 따라할 내 전용 스크립트를 만들어놓으니, 다시 까는데 한시간이 채 안걸리네.

이제, 세팅이 어느정도 마무리되었으니 root로 로그인하는 것을 막자.

~$ vi /etc/ssh/sshd_config # ssh config 파일 열기
PermitRootLogin yes -> PermitRootLogin no #Root Login 허용 여부 수정
~$reboot #sshd 데몬만 다시 띄워주면 되지만 콘솔화면이 없으므로 리부트!

와, 이젠 어느정도 세팅 마무리 했나보다.

usbit을 이용해서 나중에 데비안이 깨졌을때를 대비해서 백업해 두자.(아치리눅스에 비해서 정전 등에 취약하다.) : debianlinux_20180929.img




반응형

설정

트랙백

댓글

오일이 블투 스택 업데이트

IT 등/PDA 이야기 2006. 7. 2. 01:50
반응형
내가 지금 쓰고 있는 PDA인 오일이(AXIM x51v의 애칭)의 블루투스 스택을 업데이트 했다.

원래 오일이의 블투 스택이 스테레오 헤드셋을 지원하지 않아서 사용자들 간에 불만이 많았다. 델에서 정식으로 나온 업데이트가 없고 WidComm사의 드라이버로 블투 스택을 업데이트 해서 쓰는 방법만이 알려져 있었다. 여지껏까지 나왔던 0.38 버전까지는 내부적으로 A2DP Profile을 지원하는 선까지 업데이트가 이루어졌었으나 0.5 버전으로 업데이트가 되며 외관상으로도 변화가 생겼는데 Wireless Power 버튼으로 블투도 켤 수 있게 된 것이다.

아래 그림은 무선랜 파워버튼을 눌렀을 때 나타나는 화면이다. 무선랜과 블투 중 선택해서 켤 수도 있으며 둘 다 켤 수도 있는 화면을 제공한다.

AXIM x51v Wireless 버튼으로 블투도 조작할 수 있게 되었다.
블투 스택 업데이트 파일의 다운로드 링크이다.

[DN=cfile22.uf@223A104058776F812A71F4.zip]WidComm BlueTooth Stack Update 0.5 Download[/DN]

설치 방법은 다음과 같다.

1) Delete full key H K Local Machine\Software\Widcomm
2) 다음의 파일을 Rename 하거나 다른폴더로 옮깁니다 (ex: \temp),
\Windows\BTCeIf.dll,
\Windows\BTCeStack.dll,
\Windows\BTCeProfiles.dll
\Windows\Startup\BTTrayCE.lnk
3) 소프트 리셋.
4) 자료실에 있는 파일 2개를 실행합니다.
5) 자동으로 소프트 리셋됩니다.
6) 옆의 무선랜 파워온오프 버튼이 블투가 켜집니다.
반응형

설정

트랙백

댓글

이노포켓 매그넘 케이스

IT 등/PDA 이야기 2006. 4. 19. 16:07
반응형
바로 아래에 첨부한 사진은 이노포켓(http://www.innopoket.com)사의 PDA 매그넘 케이스이다.
그중 AXIM 50v/51v 용이다.

첨부한 사진은 그중에서 벨트클립 부분이다. 이 부분에 어떠한 문제가 있는고 하니 한번 이렇게 조립이 된 후에는 벨트클립 부분과 케이스 부분을 떼기 위해서는 가운데 부분의 버튼(?)을 눌러서 고리를 열어야 두 개가 분리되는데 그 버튼이 눌리지 않는다.

그래서 보통 벨트클립과 케이스를 떼어서 착탈하는데 반해서 이놈은 벨트클립 자체를 떼어야 한다. 얼마나 꼴이 우스워지는지...
이런 것 하나 만들적에 좀 깔끔하게 만들어 주었으면 하는 소망이 있긴 한데, 또 이 PDA 케이스라는게 PDA 크기에 꼭 맞게 만들어야 하기 때문에 선택의 폭도 좁고 다른 PDA를 위한 케이스가 아무리 마음에 들어도 사용을 할 수 없다. 울며 겨자먹기로 써야 하는... 쩝.

그렇다고 내가 손재주가 좋아서 일일히 가공을 할 수 있는 것도 아니고. 가끔 인터넷에 보면 케이스도 DIY 하는 사람들이 있기는 하던데.
반응형

설정

트랙백

댓글