pull, commit, push, merge 가 잘 이루어질 경우에는 그 쾌감은 이루 말할 수 없다. 하지만 이와 반대로, conflict를 제외한 "요상한" 에러들이 날 경우에는 그 빡침 또한 이루 말할 수 없다...
이번 포스팅에서는 그 "요상한" 에러들 중 하나를 다룰 것이다..
[에러]
There are no candidates for merging among the refs that you just fetched. Generally this means that you provided a wildcard refspec which had no matches on the remote end.
git pull 시, 위와 같은 에러가 난다. 그래서 구글링 해봤을 때, 가장 유력했던 글은 아래 링크와 같다.
위 링크의 내용 중 답변에 해당하는 부분들을 간단히 정리해보면, 1. Having different versions of Git clients could become problematic it seems -> push 한 곳과 pull 한 곳의 git client 버전이 다른 경우 2. destination folder being out of space. -> git pull 하는 곳의 폴더의 용량이 가득 차서 부족한 경우 3. Happened to me when I tried to pull from mounted (read sshfs) directory -> 마운트된 외부 디렉토리에서 git pull 을 때리는 경우 4. .git/config 설정 오류
실제로 가능성이 있던 오류들을 정리해보았다.
내 경우에는 3번과 같다.
위와 같은 사진과 같은 환경에서 작업을 한다.
윈도우 os에서 vm 환경으로 우분투 os를 올리고
vm 우분투 os 내에서 Apache2 환경을 구성하고
Apache2에서 서비스 할 웹 코드를 윈도우 os의 폴더로 마운트하여 사용(Shared Folders)
이런 상태에서 git pull 명령을 ssh 접속하여 우분투 os에서 git 작업을 하니까 발생하는 에러였다.
Vhost란? Apache2의 Virtual host 기능을 통해서 하나의 아파치 서버에서 독립된 서버 공간을 나누는 작업을 의미한다.
설정 파일 조작
vhost에 필요로 하는, 수정해야하는 설정들은 위 그림에서 처럼 3가지이다.
ports.conf : 각 vhost 마다 사용할 포트 등록. sites-available, -enabled : vhost에 필요한 설정 파일 등록.
먼저, /etc/apache2 경로의 sites-available/ 디렉토리 내에 필요한 파일을 구비할 것인데, sites-available 디렉토리는 현재 비활성 중인 사이트들의 설정 파일을 담고 있는 디렉토리이다.
001-autotag.api 라는 이름으로 가상 환경을 나눈다. 내용은 다음과 같다.
<VirtualHost *:7011> 과 같이 해당 가상 환경에서 사용할 포트를 기재해주고, ServerName에는 도메인 주소가 들어간다. DocumentRoot의 경우, 렌더링할 웹 문서 파일이 존재하는 Default 경로라고 생각하면 되겠다. ErrorLog 및 CustomLog 는 해당 vhost에서 발생하는 로그들을 어디에 저장할 것인가를 지정한다. <Directory ~ > 부분은 해당 vhost에 대한 옵션들이라고 생각하면 된다.
-------------------------------------------------------------------------------------------------------------------------------------------------- [해당 내용] <VirtualHost *:7011> ServerName autotag.api ServerAdmin ysho0707@gmail.com DocumentRoot /server_app/autotag.api ErrorLog ${APACHE_LOG_DIR}/django.api/error.log CustomLog ${APACHE_LOG_DIR}/django.api/access.log combined <Directory /server_app/autotag.api> Options All AllowOverride All Require all granted </Directory> </VirtualHost> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet --------------------------------------------------------------------------------------------------------------------------------------------------
그리고 다음으로는 sites-enabled 디렉토리를 수정할 것이다. sites-enabled 디렉토리는 현재 활성 중인 사이트의 설정 파일들을 갖는 디렉토리인데, 보통 sites-available 디렉토리에서 심볼릭 링크를 걸어서 설정 파일을 채워넣는 형태로 진행이 된다. 그 부분을 다음에서 확인할 수 있다.
위와 같은 경로에 ports.conf 파일이 존재하는데 이 부분에 해당 Virtual Host 공간의 접속 포트를 추가하면 된다. 위 과정 중에서 sites-available 디렉토리 내에 001-autotag.api.conf 의 가장 첫 줄에 포트 번호가 있다. 그 번호를 추가한다.
포트를 추가하면 기본 default로 정했던 7010 포트 뿐만 아니라, autotag.api 이름의 가상 호스트의 포트 또한 접속 요청으로 수용할 수 있다.
Apache2 재시작
아파치를 위와 같이 재시작하고, 접속을 시도해본다.
접속 및 테스트
위와 같이 깔끔하게 접속이 잘 된 모습을 볼 수 있다. 해당 페이지는 “hello” 를 출력하는 페이지 파일을 001-autotag.api.conf 의 DocumentRoot 경로에 기술한 경로에 사전에 집어넣어 렌더링 된 상태이다.
해당 디렉토리에 아무 것도 넣지 않고 접속하면 아무 것도 출력되지 않으니 확인을 해야한다. /etc/hosts를 수정한다면 다음과 같이 접속 또한 가능하다.
/etc/hosts 파일을 다음과 같이 수정하게 되면 autotag.api 라는 주소는 앞으로 192.168.0.112로 바꿔서 해석하겠다 라는 의미를 갖는다.
여기서 중요한 것은 그 말인 즉 슨 내 컴퓨터 내에서만 적용되는 규칙이다. 외부 사람들은 백 날 autotag.api를 친다 하더라도 접속이 되지 않을 것이다.
sites-available 디렉토리 내의 conf 파일과 동일한 이름으로 심볼릭 링크를 지어준다.
vhost를 추가할 때에는 아래의 명령으로 추가됨을 반영하자.
sudo a2ensite phindol(sites-available, enable등에서 지정했던 이름 ex] 001-phindol.conf 에서의 phindol)
윈도우 host 파일 설정
conf 파일의 설정을 봤다면 알겠지만 취급할 virtual host의 도메인은 "phindol.com" 이다.
그러나 우리는 해당 도메인을 구매하여 구비하지 않았기 때문에 실제로 테스트를 할 수 없다. 이러한 경우 윈도우의 host 파일을 수정하여 나의 컴퓨터 내에서 해당 도메인에 대한 접속을 바꿔주는 것이다.
C:\Windows\System32\drivers\etc
위 경로를 관리자 권한으로 열고, 아래의 그림처럼 수정한다. ( 탭 단위로 구분한다 )
우분투 20.04에서 테스트 할 경우 127.0.0.1 이 먹히지 않는 경우가 있어 확인해 봤더니 다음과 같은 이유였다.
그리고 나서 아파치를 재시작한다.
#은 지우고 실행한다.
성공적인 결과가 말을 해주고 있다.
왼쪽은 http://localhost/ 도메인으로 vhost 설정이 되지 않은 메인 host이고 오른쪽은 vhost 설정이 된 가상 host이다. vhost 설정을 하면서 rewrite라고 하는 주소를 고쳐쓰는 모듈을 설정했는데 왼쪽과 오른쪽에서 rewrite 모듈이 실행 안되고/되고 의 결과를 본다면, vhost 설정을 통해 하나의 아파치 웹 서버에서 서로 독립적인 사이트처럼 실행된다는 사실을 확인할 수 있다.
로그 폴더의 생성
vhost 설정 중 log 각 vhost 마다 로그 폴더를 따로 두었는데, 이에 따른 생성 및 권한 설정을 해야한다.
sudo mkdir /var/log/apache2phindol
Rewrite 모듈 설정
Rewrite는 Request를 정해진 Rule에 의해서 다른 URL or File로 보내는 모듈을 뜻한다.
예를 들어, 다음 그림과 같다고 보면 된다.
그렇다면, redirect와 다른 점은 무엇일까?
redirect 는 클라이언트 사이드에서 처리가 이루어지며, 클라이언트의 주소 표시줄에 변경된 주소가 표시된다. rewrite 는 서버 사이드에서 처리가 이루어지며, 클라이언트의 주소 표시줄에 변경된 주소가 표시되지 않는다.
위의 vhost .conf 파일 설정 중 rewrite 부분을 다시 확인 한다면,
이 부분이다. 각 지시자들에 대한 설명은 검색을 통해 확인한다.
RewriteEngine ~ RewiteRule 까지가 본인이 정한 Rewrite 룰인 것이다. 저 룰이 실행되려면 다음과 같은 명령을 명령 라인에 실행한 뒤 아파치를 재실행 하면 된다.
sudo a2enmod rewrite # rewrite 모듈 활성
이후에 apache 재실행을 하면 phindol.com 에 대해서만 rewrite 룰이 적용되는 것을 아래의 그림처럼 확인할 수 있다.
지난 포스팅(https://typingdog.tistory.com/99)에서 SVN 서버 설치 및 구동 방법을 다루었다. 이번 포스팅에서는 시스템 부팅 시 자동 재 실행, 포트 변경 등을 정리해보았다.1. 서비스 등록자동 재 실행 및 systemctl 등을 통해 명령하기 위해서는 서비스에 등록을 해야한다.
먼저, svn 을 자동으로 실행하는 데몬을 만든다.
sudo vim /etc/rc.local
# Subversion svnserve -d -r /svn/svnrepo위 내용을 rc.local 에 기록하고 저장.