개발 중에 필요한 테스트 환경을 쉽게 구성해주는 도구인 Laravel Homestead를 Linux나 Mac에서 사용하는 방법을 정리해보았다. 공식 문서는 개발자들의 표준 컴퓨터인 Mac을 기준으로 되어있기 때문에 그 내용에서 크게 다를 것은 없다. Windows에서 사용하는 방법은 다음 글을 참고하자.

vagrant 기반으로 만들어진 Laravel Homestead는 다음 환경으로 구성되어 있다.

이와 같이 복잡해 보이는 운영 스택을 명령어 4개 입력하고 파일 2개 편집하는 것으로 간단히 구성할 수 있다.


1. 필요한 것

vagrantVirtualBox 설치가 필요하다. 공식 사이트에서 내려받아서 설치해도 되고, 패키지 시스템에 있다면 그걸 설치해도 되겠다. Mac이나 Linux를 쓸 정도라면 git은 이미 설치가 되어있겠지만, 혹시 없다면 이것도 설치한다.


2. Homestead 프로젝트 받기

아래와 같이 github에서 Homestead 프로젝트 저장소를 내려받는다.

git clone https://github.com/laravel/homestead.git Homestead

PHP7을 사용하고 싶다면 아래와 같이 프로젝트를 받는다.

git clone -b php-7 https://github.com/laravel/homestead.git Homestead


3. SSH 키 생성

가상환경에서 사용할 SSH 키 생성이 필요한데, 이미 생성해둔 것이 없다면 아래 명령어로 생성한다.

ssh-keygen -t rsa -C "you@homestead"


4. 설정

프로젝트 저장소를 내려받은 곳으로 이동한 뒤에 다음을 실행한다.

bash init.sh

실행하고 나면, ~/.homestead 디렉토리가 만들어지고, 그 안에 아래와 같은 내용의 Homestead.yaml 파일이 생성된다.

---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: ~/Projects
      to: /home/vagrant/Code

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public

databases:
    - homestead

variables:
    - key: APP_ENV
      value: local

# blackfire:
#     - id: foo
#       token: bar
#       client-id: foo
#       client-token: bar

# ports:
#     - send: 93000
#       to: 9300
#     - send: 7777
#       to: 777
#       protocol: udp

위의 내용에서 굵게 표시한 내용이 확인이 필요한 내용으로, 설명은 아래와 같다.

  • ip : 가상환경에서 사용할 ip. 별 문제없으면 기본값을 사용하면 된다.
  • authorize : 공개키 파일 위치
  • keys : 개인키 파일 위치
  • folders : VirtualMachine과 공유할 디렉토리 설정
  • sites : 가상 환경에서 연결할 프로젝트 경로. folders에서 연결한 경로 하위 디렉토리를 도메인으로 연결할 수 있다.


5. hosts 파일 수정

sites - map 항목에 연결한 도메인을 /etc/hosts 파일에 추가한다.

192.168.10.10    homestead.app


6. Homestead 실행

아래 명령어로 Homestead를 실행한다.

vagrant up

처음 실행하는 것이면, box(vagrant에서 사용하는 이리 생성된 가상 머신 템플릿)를 다운로드 받는데 시간이 좀 걸린다.


7. 사용

여기까지 모두 끝났으면, 브라우저를 띄워서 위에서 설정한 도메인(위의 경우 homestead.app)을 입력하면 프로젝트 화면이 나올 것이다. 공유 폴더로 연결되어 있기 때문에 프로젝트 디렉토리의 변경사항은 바로 반영된다.

가상 머신에 SSH를 사용하여 접속하는 것도 가능한데, 생성해둔 SSH 개인키를 사용하지 않을 경우에는 아이디/패스워드 모두 "vagrant" 를 입력하여 접속할 수 있다.


명령어 한줄로 SSH 키를 만들 수 있는 *NIX 운영체제와는 달리, 윈도우에서는 키를 만들기 위해서 별도의 도구가 필요하다. 보통은 PuTTY를 설치하면 같이 설치되는 PuTTYgen을 사용한다.


1. 준비


PuTTY를 설치했다면 보통 PuTTYgen도 같이 설치되어있지만, 혹시 없다면 puttygen.exe 파일을 내려받는다.



2. 개인키 생성


PuTTYgen을 실행하면 아래와 같은 화면이 나온다.



이 화면에서 "Generate" 버튼을 누르면 아래와 같은 화면을 볼 수 있다.



진행 막대 아래에 있는 공간에서 마우스 포인터를 움직여주면, 키 생성 작업이 진행된다. 키 생성이 끝나면 아래 화면으로 바뀌게 된다.



3. 저장



이 화면에서 "Save private key" 버튼을 누르면 개인키를 저장하는데, Key passphrase 가 없다는 메시지가 나온다. 대부분의 경우 비밀번호 입력 대신에 사용할 용도로 키를 만들기 때문에 무시하고 저장하면 된다. 공개키는 "Save public key" 버튼도 눌러서 저장하거나, 화면에 나온 내용을 복사해서 사용해도 된다.

Laravel HomesteadLaravel 개발 시에 테스트를 위한 가상환경을 편리하게 구성할 수 있도록 도와주는 도구이다. 하지만, 기본적으로 PHP 프로젝트를 위한 환경 구성이기 때문에, Laravel만 아니라, PHP로 개발하면서 테스트 환경이 필요할 때에도 유용하게 사용할 수 있다. Homestead는 아래와 같은 환경으로 구성되어 있다.

Laravel Homestead는 vagrant로 만들어져 있으며, (Mac OS X를 포함한) *NIX 계열 OS에서는 사용하기 편리하게 만들어져 있지만, 공식 문서의 설명도 Windows 사용자는 배려하지 않고 있다. 하지만, Windows에서도 아래와 같은 순서대로 따라하면, 그다지 어렵지 않게 사용할 수 있다.


1. 필요한 것

  • vagrant 설치 : 에서 설치 파일을 다운로드 받아서 설치한다.
  • Oracle VirtualBox 설치 : 역시 에서 설치파일을 다운로드 받아서 설치한다. VMWare를 사용할 수도 있지만, VMWare를 사용하는 경우에는 PlugIn도 설치해야 해서, 게다가 유료이고, Virtual Box만 테스트해보았다.
  • git 설치 : 간단하게 zip파일을 다운로드하는 방법도 있지만, git을 설치하면 쉘스크립트를 실행하기 위해서 필요한 bash도 같이 설치되어 설치 절차가 간편해진다. 개발자라면 대부분 설치했겠지만, 아직 설치하지 않았다면 git 에서 Windows 용 설치파일을 다운로드 받아서 설치한다.
  • BIOS 설정 확인 : 하드웨어 가상화(VT-x)가 켜져 있는지 확인한다.


2. Homestead 프로젝트 받기

아래와 같이 github에서 Homestead 프로젝트 저장소를 내려받는다.

git clone https://github.com/laravel/homestead.git Homestead

PHP7을 사용하고 싶다면 아래와 같이 프로젝트를 받는다.

git clone -b php-7 https://github.com/laravel/homestead.git Homestead


3. SSH 키 생성

가상환경에서 사용할 SSH 키 생성이 필요하다. 의 설명을 참고해서 공개키/개인키 파일을 만든다. 키 파일을 저장힐때, 사용자 폴더(이하 %HOME%) 밑에 .ssh 라는 폴더를 만들어서 각각 아래 이름으로 만들면, 설정에서 키 관련한 설정은 신경쓸 필요가 없다.

  • 공개키 : id_rsa.pub
  • 개인키 : id_rsa


4. 설정

Git을 설치했다면, Git Bash라는 것도 함께 설치되었을텐데, 이것을 실행한 뒤에 프로젝트 저장소를 내려받은 곳으로 이동한 뒤에 다음을 실행한다.

bash init.sh

그러면, 사용자 폴더(이하 %HOME%)에 .homestead 라는 폴더가 생성된다.

%HOME%\.homestead\Homestead.yaml 파일을 에디터로 열면 대략 아래와 같은 내용이 있을 것이다.

---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: ~/Projects
      to: /home/vagrant/Code

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public

databases:
    - homestead

variables:
    - key: APP_ENV
      value: local

# blackfire:
#     - id: foo
#       token: bar
#       client-id: foo
#       client-token: bar

# ports:
#     - send: 93000
#       to: 9300
#     - send: 7777
#       to: 777
#       protocol: udp

위의 내용에서 굵게 표시한 내용이 확인이 필요한 내용으로, 설명은 아래와 같다.

  • ip : 가상환경에서 사용할 ip. 별 문제없으면 기본값을 사용하면 된다.
  • authorize : 공개키 파일 위치
  • keys : 개인키 파일 위치
  • folders : VirtualMachine과 공유할 폴더 설정
  • sites : 가상 환경에서 연결할 프로젝트 경로. folders에서 연결한 경로 하위 폴더를 도메인으로 연결할 수 있다.


5. hosts 파일 수정

sites - map 항목에 연결한 도메인을 Windows\system32\drivers\etc\hosts 파일에 추가한다. (관리자 권한 필요)

192.168.10.10    homestead.app


6. Homestead 실행

커맨드라인 창을 띄우고(git bash도 무관) 아래 명령어를 실행한다.

vagrant up

처음 실행하는 것이면, box(vagrant에서 사용하는 이리 생성된 가상 머신 템플릿)를 다운로드 받는데 시간이 좀 걸린다.


7. 사용

여기까지 모두 끝났으면, 브라우저를 띄워서 위에서 설정한 도메인(위의 경우 homestead.app)을 입력하면 프로젝트 화면이 나올 것이다. 공유 폴더로 연결되어 있기 때문에 프로젝트 폴더의 변경사항은 바로 반영된다.

가상 머신에 SSH를 사용하여 접속하는 것도 가능한데, 생성해둔 SSH 개인키를 사용하지 않을 경우에는 아이디/패스워드 모두 "vagrant" 를 입력하여 접속할 수 있다.


Windows 7에서 네트워크 드라이브가 표시되지 않을때 대체방법을 포스팅한 적이 있는데, Windows 8에서 동일한 문제가 발생했지만, 이 방법으로도 해결되지 않는 사례가 있었다. 이번에는 아래와 같이 다른 방법으로 해결했다.

  1. 제어판을 열어서, 관리도구를 열고, 로컬 보안 정책을 실행한다.
  2. 좌측의 트리에서 로컬 정책 - 보안 옵션을 선택한다.
  3. 우측 목록에서 "네트워크 보안: LAN Manager 인증 수준"을 클릭하고 나오는 팝업에서 "LM 및 NTLM 응답 보내기"를 골라서 설정한다.
  4. 우측 목록에서 "네트워크 보안: NTLM SSP기반(보안 RPC 포함) 서버에 대한 최소 세션 보안"을 클릭하여 나오는 팝업에서 "128비트 암호화 필요"를 체크 해제한다.
  5. Windows 리부팅

참고 : http://www.eightforums.com/network-sharing/18056-w2k3-server-can-access-w8-w8-computer-cant-see-w2k-server.html

MySQL의 Replication에서 쿼리에 문제가 생겨서 중지되는 경우가 가끔 있다. 그때마다 재시작하는 방법이 생각나지 않으면 찾아보는게 귀찮아서 여기에 간단히 정리해둔다.

mysql> SHOW SLAVE STATUS \G
(문제된 쿼리 확인)
mysql> STOP SLAVE;
(문제된 쿼리 처리)
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
mysql> START SLAVE;

참고 : https://www.howtoforge.com/how-to-repair-mysql-replication

fstab 파일의 가장 위에 보면 보통 아래와 같은 설명이 달려있다.

# <file system> <mount point>   <type>  <options>       <dump>  <pass>

앞의 네 항목은 딱 보면 알만한 내용들이라 그렇게 어렵지 않다.

  1. file system : 마운트 할 파일 시스템 (/dev/sda, UUID=BLAHBLAH..., proc 등)
  2. mount point : 마운트할 경로 (/, /mnt/usb 등)
  3. type : 마운트할 파일 시스템의 타입  (ext4, ntfs 등)
  4. options : 마운트할 때 줄 옵션 (rw, ro, noexec 등)

문제는 마지막 두 항목은 dump나 pass라는 이름만 보고는 어떤 역할을 하는지 알기 힘들다는 것이다. 이미 설정되어있는 값을 보아도 0이나 1같은 숫자 뿐이다. 이런걸 알아보려면 역시 Manpage가 우선이다. Manpage를 보면 마지막 두 항목은 다음과 같이 설명되어 있다.

The fifth field (fs_freq).
This field is used for these filesystems by the dump(8) command to  determine which filesystems need to be dumped.  If the fifth field is not present, a value of zero is returned and dump will assume that the filesystem does not need to be dumped.

The sixth field (fs_passno).
This field is used by the fsck(8) program to determine the order in which filesystem checks are done at reboot  time. The root filesystem  should be specified with a fs_passno of 1, and other filesystems should have a fs_passno of 2.  Filesystems within a drive will be checked sequentially, but filesystems on different drives will be checked at the same time to utilize  parallelism available in the hardware.  If the sixth field is not present or zero, a value of zero is returned and fsck will assume that  the filesystem does not need to be checked.

다시 말하자면, dump라고 되어있는 다섯번째 항목은 해당 파일 시스템이 dump가 필요한지 여부를 설정하는 것이고, 마지막 여섯번째 항목은 리부팅시에 파일시스템을 검사할지 여부를 설정하는 것이다. 파일 시스템을 dump해야한다면 다섯번째 항목을 1로, 아니면 0으로 하면 되고, 파일 시스템을 리부팅 시에 검사하려면 여섯번째 항목을 1보다 큰 값으로, 필요없으면 0으로 하면 된다. 검사는 1부터 순서대로 한다.

'Operating' 카테고리의 다른 글

MySQL Replication 복구  (0) 2015.02.05
fstab 마지막 두 항목의 의미 - dump, pass  (0) 2015.02.03
리눅스 tmp 디렉토리 파일 시스템  (0) 2015.02.02
vipw - passwd 파일 편집  (0) 2015.01.31

운영하는 서버에 /tmp 디렉토리 용량이 필요해져서 추가 디스크를 붙여서 마운트해서 사용할 필요가 생겼다. 아무래도 임시 파일을 저장하는 곳이니, 루트 파일 시스템으로 사용하고 있는 ext4보다 적당한 것이 있지 않을까 싶어서 검색을 좀 해보았다. 하지만, 그런 건 없었다.

램 디스크를 사용하는 "tmpfs"가 있기는 한데, 이건 용량이 제한되기 때문에 내가 사용하려는 용도와는 맞지 않아 사용할 수 없었다.

그냥 ext4를 사용하되, 마운트 옵션으로 다음 옵션들을 사용하면 좋다고 한다.

barrier=0,noatime

"barrier=0" 은 몇몇 경우에 파일 쓰기 성능을 향상시켜 준다고 하고, "noatime"은 파일 접근 시간을 업데이트하는 것을 막아서 파일 입출력 속도를 높일 수 있다.

참고 : http://askubuntu.com/questions/1637/good-filesystem-for-tmp

# vi /etc/passwd

(앞의 vi는 다른 에디터를 쓸 수도 있지만) passwd 파일을 편집하기 위해서는 항상 위와 같이 했었다. 그런데, 저 역할을 하는 간단한 명령어가 있었다.

# vipw

이런 간단한 작업을 위해서 일부러 명령어를 따로 익힐 필요는 없겠지만, 너무 간단해서 이미 알게된걸 일부러 안 쓸 필요도 없으니, 필요할때 사용해야겠다.

'Operating' 카테고리의 다른 글

리눅스 tmp 디렉토리 파일 시스템  (0) 2015.02.02
vipw - passwd 파일 편집  (0) 2015.01.31
"leaking memory" messages in ubuntu  (0) 2014.12.12
Subversion 저장소를 Git으로 옮기기  (0) 2014.03.05

no talloc stackframe at ../source3/param/loadparm.c:4864, leaking memory

우분투 머신 콘솔에서 갑자기 위와 같은 메시지가 나오기 시작했다. 막 14.04로 업그레이드를 끝낸 직후라서 업그레이드가 잘못되었는지 알았는데, libpam-smbpass에 문제가 있는 것 같다.

현재까지 제안된 임시조치는

  1. libpam-smbpass 패키지를 삭제하거나
  2. sudo pam-auth-update 를 실행한 뒤에, SMB password synchronization 체크를 끄는 방법이 있다.

이렇게 하면, 일단 버그가 수정될 때까지는 저런 메시지가 나오지 않도록 할 수 있다..


1. 커미터 목록 정리

Subversion 저장소를 checkout 해둔 경로에서 다음 명령어를 입력해서 커미터 목록을 저장한다.

$ svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors.txt

이제 파일 내용을 보면 각 줄마다 커미터 정보가 아래와 같은 형식으로 있을 것이다.

meye = meye <meye>

이것을 아래와 같이 적당히 고쳐준다.

meye = mEye <meye@dev.meye.net>


2. git-svn으로 Subversion 저장소 가져오기

중간 작업들을 하기 위해서 임시로 가져온다.

$ git svn clone [Subversion 저장소 URL] --no-metadata -A authors.txt --stdlayout ~/temp


3. .gitignore 만들기

Subversion 저장소에 설정한 "svn:ignore" 설정들을 .gitignore 파일로 옮기고 커밋한다.

$ cd ~/temp
$ git svn show-ignore -i trunk > .gitignore
$ git add .gitignore
$ git commit -m "svn:ignore 설정을 .gitignore 파일로 변환"


4. Git bare 저장소를 만들기

이제 준비작업은 다 끝났으니 Subversion 저장소를 옮길 Git bare 저장소를 새로 만든다. 이 저장소의 기본 브랜치(HEAD)를 Subversion의 "trunk" 브랜치와 연결해둔다.

$ git init --bare ~/new-bare.git
$ cd ~/new-bare.git
$ git symbolic-ref HEAD refs/heads/trunk


5. Subversion 저장소를 새 Git 저장소로 옮기기

$ cd ~/temp
$ git remote add bare ~/new-bare.git
$ git config remote.bare.push 'refs/remotes/*:refs/heads/*'
$ git push bare

여기까지 끝났으면 이제 Subversion 저장소를 clone 경로는 삭제해도 된다.

$ rm ~/temp

이제 trunk로 되어있는 브랜치 이름을 master로 바꾸자.

$ cd ~/new-bare.git
$ git branch -m trunk master


6. 태그 정리

git-svn은 Subversion의 태그들을 git의 브랜치로 만들어 두기 때문에 이를 git의 태그로 변환하는 과정이 필요하다. 각 줄의 > 는 입력하는 것이 아니고, 하나의 명령을 여러 줄에 걸쳐서 입력할때 쉘에서 보여주는 프롬프트 표시이다.(이제와서 설명하기도 좀 그렇지만, 당연히 $ 표시는 쉘 프롬프트 표시이다.)

$ git for-each-ref --format='%(refname)' refs/heads/tags |
> cut -d / -f 4 |
> while read ref
> do
>  git tag "$ref" "refs/heads/tags/$ref";
>  git branch -D "tags/$ref";
> done


7. 완료

이제, git 저장소가 준비되었다. 새로 만든 bare 저장소(여기서는 new-bare.git)를 적당한 곳에 복사해놓고 사용하면 된다.


[참고]

  • http://john.albin.net/git/convert-subversion-to-git
  • http://john.albin.net/git/git-svn-migrate


+ Recent posts