Category: HowTo

wp-cli 를 이용한 core, plugin 업데이트 하기

워드프레스(WordPress) 를 사용하고 있는데, 갑자기 화면을 통한 플러그인(Plugin), 코어(Core) 업데이트가 되지 않았다. 보통은 문제 없이 이것이 수행되었는데, 뭔가 문제가 있는건지 파악해봤지만 찾지지는 못했고 그냥 포기해야 하나 하는 찰라에 wp-cli 를 이용하면 업데이트를 모두 할 수 있다는 사실을 알게 됐다.

wp-cli.phar

워드프레스에서 정식으로 배포하는 것 같지는 않다. github 에서 배포 받을 수 있는데, 간단하게 wp-cli.phar 파일을 다운로드 받으면 된다.

사용법

다운받은 wp-cli.phar 를 /usr/local/bin 으로 복사하고 워드프레스 설치한 계정으로 전환해서 사용하면 된다고 하지만 개인적으로 그냥 워드프레스가 설치된 계정에서 실행해도 된다.

위와같이 abcd 계정에 wordpress 디렉토리에서 실행한 결과다.

코어 업데이트

코어(Core) 업데이트를 할 수 있다.

플러그인(Plugin) 업데이트

플러그인 업데이트를 다음과 같이 할 수다.

위 예제에서는 모든 플러그리인을 업데이트했다.

Mint Linux 21.1 설정

오랫동안 민트 리눅스(Mint Linux) 를 데스크탑 운영체제로 사용해왔다. 정확하게는 데스크탑 PC 를 새로 맞춤과 동시에 설치해서 써왔는데, 이번에 데스크탑 PC 를 교체하게 되면서 민트 리눅스를 재설치해야하는 상황이 되어 그 동안 써왔던 민트 리눅스 설정을 기록으로 남긴다.

XFCE 데스크탑

민트 리눅스 데스크탑은 세가지가 존재하는데, 그중에서 XFCE 데스크탑을 사용했다. 이 XFCE 를 만진지도 거의 20년이 넘었다. 솔라리스의 CDE 를 닮아서 쓰기 시작해서 지금까지 쓰고 있다. XFCE 는 가벼우면서도 복잡하지 않는 데스크탑이다. 그러다보니 별로 설정할게 존재하지 않는다. 데스크탑이라는 것이 어짜피 설치하고 나면 쓰는 것만 쓰게 되어 있어서 뭔가 많은 것을 만져야하고 존재하는 것 부터가 거추장스러운 것이다. 단순하면서도 필요한 것만 있는 XFCE 를 그래서 20년 넘게 사용했다.

설치 후 화면

설치 후에 처음 화면은 다음과 같다.

그냥 윈도우처럼 보인다. 이 겉모양은 XFCE 의 본래 모습이 아니다.

XFCE 는 솔라리스의 CDE 를 모티브로 만들어졌다. 그래서 초창기때부터 솔라리스 CDE 의 겉모양을 본떠서 데스크탑을 꾸미기 시작했다. 이 글을 쓰는 목적도 대충이나마 솔라리스CDE 겉모양을 꾸미는 과정을 기록으로 남기기 위서다.

패널 기본 설정

화면 아래 길게 늘어진 바가 패널(Pannel) 이다. 이 패널을 약간 손질해서 기본적인 CDE 모양으로 만들어보자. 패널에 마우스 오른쪽 버튼을 클릭하고 ‘패널 -> 패널 기본 설정’ 으로 들어간다.

패널 기본 설정

첫번째로 해야하는 것은 패널을 추가는 것이다. 설정 창에 맨 위 ‘패널1’ 글자 옆에 + 버튼을 클릭하면 ‘패널2’ 라고 바뀌고 화면 어딘가에 패널 바가 생성된다. 한 화면에 패널을 두개 사용할 것인데, 하나는 화면 위에 올려두고 시작메뉴와 태스크바로 사용하 다른 하나는 솔라리스CDE 처럼 일종의 런처로 사용할 것이다.

‘패널1’ 을 설정창에서 선택하고 ‘표시탭->일반’ 에서 ‘패널 고정’ 체크를 해제해 준다. 그러면 패널 양쪽에 마우스를 올리고 잡을 수 있는 상태가 표시된다. 마우스로 잡은 다음에 화면 위쪽으로 옮겨준다. 다 옮겨 줬으면 ‘패널 고정’ 체크를 해 패널1을 고정 시켜준다.

‘패널 기본 설정’ 창에서 ‘패널2’를 선택하면 화면 어딘가에 패널이 보인다. 이 패널2도 ‘표시탭->일반’ 에서 ‘패널 고정’ 체크를 해제해준다. ‘패널1’ 과는 달리 아무것도 없다보니 패널 가로길이가 작다. 솔라리스CDE 의 런쳐처럼 사용할 것이기에 화면 중앙에 놓는다. 그리고 ‘표시탭->일반’ 에서 길이(%) 를 44 로 조정하고 열 높이(S) 를 59 로 변경한다.

패널2 설정

대충 런쳐로 쓰일 패널이 만들어졌다. 이 패널2에 쓸만한 항목들을 추가해준다.

패널2 항목 추가

대략 왼쪽부터 ‘프로그램 메뉴’, ‘위치’, ‘파이어폭스’,’Xfce터미널’,’작업공간전환기’,’눈동자’,’스크린샷’,’로그아웃’,’휴지통’,’날짜와시간’ 이다.

여기서 중요한 것은 ‘파이어폭’,’Xfce터미널’,’로그아웃’ 은 항목추가에서 ‘실행기’ 추가를 하고 난 다음 ‘실행기’ 설정에서 애플리케이션을 선택해준 것이다. 모든 것이 패널 항목으로만 넣을 수는 없다. 패널 항목 수보다 패널이 길이가 길다면 ‘패널 기본 설정’에서 패널의 가로 길이를 조정해 주면 된다.

모양새

모양새는 ‘설정->모양새’ 에서 찾을 수 있는데, 데스크탑에 기본 페인팅을 바꿀 수 있게 해준다. 과거 솔라리스CDE 와 비슷한 느낌의 페인팅은 회색 바탕에 핑크 창틀이였다. 인터넷에서 XFCE 에 CDE 테마를 검색해서 찾아본 결과 Soaris-9-2.0 이 잘 동작했다.

모양새 많은 페인팅들은 테마(Theme) 라고 하는데, /usr/share/themes 디렉토리에 테마 이름의 디렉토리로 존재한다. 첨부된 파일을 다운받아 압축해제하면 사용할 수 있다.

Solaris-9.2.0 모양새 적용

과거 솔라리스CDE 의 모양새 그대로다. 만일 이 모양새가 맘에 들지 않는다면, 그것이 리눅스와 좀 다른 맛(?) 을 느끼 싶다면 적어도 과거 솔라리스CDE 의 전체 테마와 잘 어울릴만한 것을 찾는다면 기본으로 제공되는 모양새중에 ‘Mint-Y-Legacy-Dark-Pink’ 를 추천해 본다.

Mint-Y-Legacy-Dark-Pink 모양새 테마

기본으로 제공해 주는 모양새 테마가 많기 때문에 원하는 취향에 맞춰 선택해주면 된다.

창 관리자

창 관리자는 창 틀의 모양과 최소,최대,없애기 버튼의 위치등을 변경할 수 있도록 해준다. 창 관리자 역시 테마 리스트들이 있고 원하는 창 모양의 테마를 선택하면 적용 된다. 인터넷을 통해 cdetheme-solaris 를 얻게 되었고 이를 통해서 과거 솔라리스CDE 창틀 모양을 얻을 수 있었다.

솔라리스CDE 테마

cdetheme-solaris 를 맨 처음 적용하면 최소,최대,없애기 버튼의 배치가 위와같지 않다. 그럴땐, 창 관리자에 ‘단추 배치’ 부분에 나온대로 단추를 배치 시켜주면 된다. 필요없는 단추는 숨김으로 옮겨놓으면 된다.

아이콘 테마

아이콘 역시 바꿀 수 있다. 이 아이콘 테마들은 모양새에 있다. 모양새에서 ‘아이콘’ 탭을 클릭하면 다양한 아이콘 테마들을 선택할 수 있다. 물론 인터넷을 통해서 다운로드 받을 수 있다.

자주 사용하는 테마는 GNUStep, McMuse-pink-dark 다.

아이콘 테마

마무리

XFCE 는 경량 데스크탑으로 불리운다. GTK 기반으로 제작되었기 때문에 GTK 테마라면 호환이되어 사용할 수 있다. 하지만 xfce-looks 에서도 구할 수 있다. 벌써 20년이나 지났지만 CDE 테마를 고집하는건 그 특유의 레트릭한 모양의 데스크탑 그래픽을 잊을 수 없었기 때문이다.

xfce-looks.org

VIM lightline 플러그인

vim 을 사용할때에 필요한 것이 상태바(Status Bar) 다. 보통은 airline 을 많이 쓰는데, 여러가지 의존성이 필요해서 사용하기에 쉽지가 않다.

lightline 은 의존성이 복잡하지 않고 간단하게 사용할 수 있다. 다음과 같이 .vimrc 에 설정을해주면 된다.

t_Co=256 설정과 아래 두가지 부분의 설정이 핵심으로 보면 된다.

curl 사용법

curl 사용법을 정리해 본다. curl 사용법을 정리하는 이유는 쿠버네티스(Kubernetes) 를 사용하면서 테스트를 위해서 많이 사용할 명령어이기 때문이다. 쿠버네티스에서 주로 사용하는 방법은 인증서를 지정해 인증을 받아 실행시키는 API 호출이다.

–cacert

TLS 연결을 위해 인증서 파일을 지정하는데 사용 한다. 이 파일은 다중 CA 인증서를 포함할 수 있다. 여기서 ‘다중 CA 인증서’ 는 인증서 체인(Certification Chain) 을 말한다. 인증서는 반드시 PEM 포맷이여야 한다.

–cert

TLS 연결을 위한 클라이언트 인증서 파일을 지정하는데 사용 한다. 인증서는 보안 전송(Secure Transport) 를 위해서는 PKCS#12 포맷을 다른 엔진을 위해서는 PEM 포맷을 사용이여야 한다. 이 옵션은 개인 키와 클라이언트 인증서가 연결된 인증서 파일로 가정 한다.

–key

개인 키 파일 이름

쿠버네티스 테스트

현재 쿠버네티스를 KVM 에 Hardway 로 설치를 했다. controller-manager, etcd, apiserver 등을 OS 프로세스등으로 작동한다. 이러다보니 이 서버에 연결을 위해서는 인증을 해야 하는데, 인증서가 필요한데 테스트를 다음과 같이 할 수 있다.

쿠버네티스의 경우에 인증을 위해서 대부분 인증서를 사용하는데, 위 명령어가 도움을 줄 수 있다.

대칭키, 비대칭키 개념

컴퓨터를 다룬다는 건 쉬운게 아니다. 컴퓨터 자체는 공학 개념이지만 그 컴퓨터에서 작동하는 수 많은 일들은 과학에 속한다. 이러한 컴퓨터 과학분야는 매우 다양해서 대충이라도 알고 있는 것과 모르는 것의 차이는 시간이 갈 수록 커질 수 밖에 없다.

그 대충이라도 알아야하는 것중에 하나가 암호화다. 컴퓨터 네트워크를 위해서 필요한 보안을 가능하게 해주는 암호화. 개인 정보의 중요성을 가져오지 않아도 과거부터 컴퓨터 네트워크에서 암호화는 필요 이상이였다.

암호화 방법에서 데이터를 암호화 하는 키가 어떤건지를 말하는 것으로 대칭키, 비대칭키라는 말이 있다. 오늘은 암호화의 기초, 용어에 대해서 알아본다.

대칭키(Symmetric Key)

대칭키는 영어로 Symmetric Key 라고 하는데, 직역 그 자체로 ‘대칭’ 이다. ‘대칭’ 이라는 용어의 사용은 동일한 형상이 상반된 위상에 존재하는 것을 말한다. 대칭은 자연상태에서 가장 많이 발견된다. 식물의 꽃의 경우 반으로 접었을때에 포개지는 것이 대표적이다. 자연이 가장 안전적인 상태가 대칭이라는 말이 있을 정도로 자연에서의 대칭은 흔하다.

암호화는 복호화도 포함한다. 어떤 평문을 암호화 했다면 반드시 해독이 가능하도록 평문으로 되돌릴 수 있어야 한다. 이를 복호화라고 하는데, 암호화 할때 사용하는 암호화 키와 복호화 할때 사용하는 복호화 키가 모두 동일한 경우를 대칭키 암호화라고 한다.

암호화 과정과 복호화 과정을 포개면 동일한 키가 딱 들어맞고 찾을 수 있다해서 대칭키라고 이름을 붙인 것으로 보인다. (이건 추정이다. 하지만 이름 하나는 딱 맞게 잘 지은 거 같다)

대칭키 암호화는 암호화, 복호화에 모두 동일한 키를 사용하기 때문에 복호화를 하는 사람도 결국 같은 키를 가지고 있어야 한다. 암호전문을 전송, 수신하는 양측 모두 같은 암호키를 가지고 있어야지만 암호화전문을 보내고 복호화해서 평문으로 내용을 확인할 수 있으니까..

암호화의 발전은 전쟁으로 인한 것이 였다. 1,2차 대전때에 전문통신을 암호화 해야할 필요가 있었는데, 이때 암호화를 위한 키 스트링을 사용했었다. 다시 복호화를 하기 위해서는 암호화 과정에서 사용했던 동일한 키 스트링을 이용해야만 했다. 대칭키 암호화를 활용한 것이다.

이러다보니 적군에게 스파이를 파견해 하는 일중에 최우선은 이 암호화 하는데 이용하는 키 스트링을 훔쳐오는 것이다. 그 키 스트링만 알면 적군의 암호전문통신을 중간에서 가로채서 해독할 수 있고 작전을 모두 알 수 있었기 때문이다.

이것은 결과적으로 대칭키 암호화에서 암호화 한 전문 보다는 암호화를 하는데 사용한 대칭키를 어떻게 보관하고 상대방에게 전달해야 하느냐 하는 문제로 이어진다.

컴퓨터 분야에서도 대칭키 암호화를 활용한적있다. 대표적으로 DES 암호화 알고리즘이 그것이다. DES 암호화 알고리즘은 IBM 이 만들어서 미국 NIST 에 제안해 채택되었다. 하지만 1998년에 대칭키를 몰라도 수학적으로 해독이 가능하다는 것이 증명됨에 따라 사용하지 않고 있다.

비대칭키(Asymmetric Key)

비대칭키 암호화는 암호화 하는데 사용하는 암호화 키와 복호화 하는데 사용하는 복호화 키가 다르다. 어떻게 암호화 키와 복호화 키가 다른데, 평문을 암호화도 되고 더군다나 그 암호화된 문장이 평문으로 복호화가 되나? 하겠지만, 매우 잘 된다.

비대칭키 암호화의 핵심은 복호화와 전달에 있다. 정확하게 말하면 암호화, 복호화 전체과정에서 가장 중요하게 보는 부분이 복호화일 뿐이다.

암호화를 하는 이유는 보안을 위한 것이다. 그 보안이라는 것은 타인이 내가 봐야하는 뭔가 은밀한 기밀을 들키지 않고 유지 하는 것을 말한다. 결국 그 은밀한 기밀은 나만 보아야 한다는 전제가 깔린 것이다.

비대칭키 암호화에서 가장 중요하게 보는 것은 복호화다. 암호화는 아무나 다 해도 된다. 하지만 그것을 볼 수 있는 사람은 오직 나 혼자여야 한다. 따라서 복호화를 위한 키는 나만 가지고 있으면 된다.

암호화를 하는 이유는 타인에게 정보를 전달하기 위한 것이다. 타인에게 정보를 전달도 하지 않을 거라면 나 혼자 아는 암호화 키로 암호화하고 보관하면 된다. 나만 알고 있는 키이기 때문에 다른 사람에게 유출될 일도 없다. 하지만 타인에게 정보를 전달하는 거라면 대칭키 암호화에서처럼 상대방도 내 암호화 키를 알고 있어야 하고 이 키를 전달하는데 많은 보안을 유지해야 한다.

하지만 암호화 된 전문을 나만 아는 키로 해독이 가능하면 대칭키 암호화 키 전달을 위한 추가적인 보안이 필요 없다.

비대칭키 암호화는 그 누구나 암호화를 할 수 있는 키가 존재하고 나만 복호화 할 수 있는 복호화 키, 이렇게 두가지로 존재한다. 이를 공개 키(Public Key), 개인 키(Private Key) 라고 부른다.

비대칭키 암호화를 사용하기 위해서 나는 공개 키와 개인 키 두개를 만든다. 그리고 공개 키를 세상에 그냥 뿌린다. 인터넷에 그냥 올려놔도 된다. 지구상에 모든 사람이 공개 키를 알아도 된다. 왜냐하면 공개 키로 암호화 한 전문은 오로지 나 혼자 가지고 있는 개인 키로만 평문으로 복호화가 가능하니까.

비대칭키 암호화에 대표는 RSA 이다. 론 리베스트(Ron Rivest), 아디 샤미르(Adi Shamir), 레오나르드 애들만(Leonard Adleman) 3명의 수학자의 앞 글자를 따서 지은 것이다.

이 3명의 수학자는 MIT 컴퓨터 사이언스 실험실 8층에서 함께 암호화 알고리즘 연구를 진행하던 중에 디피와 헬만이 발표한 비대칭키 암호화 알고리즘을 듣게 된다. 그리고 그들도 이 암호화 알고리즘 개발에 착수하는데, 1977년 4월에 론 리베스트가 수학 교과서를 읽다가 갑자기 아이디어가 떠올랐다고 한다. 그는 전광석화처럼 그날 밤에 논문을 작성하고 마쳤는데, 논문에 마지막에 자신을 포함한 연구실 사람 이름을 올렸다고 한다. 그래서 RSA 라고 부르게 되었다는 것.

SSH 키 접속

어느날 한번쯤은 ‘SSH 키 접속’ 이라는 것을 들어보거나 검색을 해봤을 것이다. SSH 는 서버에 접속을 위한 프로그램으로 SSH 서버에 접속을 위해서는 ID/Password 입력해 접속을 한다. 하지만 SSH 는 Key 방식으로 접속을 지원한다. 이때 SSH가 사용하는 Key 방식이 RSA 키 방식이다.

SSH 키 접속을 위해서는 암호화 키를 생성해야 하는데, 대충 다음과 같은 명령어로 생성이 된다.

두개의 파일이 생성되는데, id_rsa 는 개인키(Private Key) 이며 id_rsa.pub 는 공개키(Public Key) 다.

공개키를 접속하려고 하는 서버에 사용자 ID 홈디렉토리에 .ssh 디렉토리에 authorized_keys 파일로 전송한다. 그리고 접속할때에는 개인키를 이용해서 SSH 접속을 하면 된다.

도메인 인증서

RSA 암호화를 알아야 하는 이유는 SSH 뿐만 아니라 전자서명에도 사용하기 때문이다. 전자서명으로 대표적인 것이 도메인 인증서다.

HTTPS 를 위해서 반드시 필요한 인증서가 도메인 인증서인데, 이것이 RSA 암호화를 기반으로 한다. HTTPS 는 정확하게는 RSA 암호화와 대칭키 암호화를 혼합해 작동된다.

Ansible, 특정 동작 대기/확인 하기

Ansible 을 사용할때에 특정 동작에 대해서 대기한 후에 진행하도록 해야할 필요가 있다. 대표적인 것이 Tomcat 과 같은 경우인데, Tomcat 이 시작을 하게 되면 애플리케이션이 동작하기까지 몇 초의 시간이 더 걸린다. 웹 애플리케이션이 정상적으로 접속을 받기 전에 또 다른 작업을 하게 될 경우에 문제가 된다.

wait_for

Ansible 에서는 위와같은 경우를 위해서 wait_for 라는 것을 지원한다. 예제를 보면 단번에 이해할 수 있다.

포트 80 을 체크해 10초동안 딜레이를 가진다.

다음 예제를 보자.

tomcat.pid 파일이 생성되면 다음 스텝으로 진행 된다.

또 다음 예제를 보자.

tomcat.pid 파일이 삭제되면 다음을 진행한다.

위 예제2,3을 활용하면 Tomcat 웹 애플리케이션을 배포할때에 활용가능하다.

RedHat Enterprise Linux Subscription 관리

현재 프로젝트를 하면서 RHEL 을 테스트용으로 사용하고 있다. Developer 라면 가입을 하면 Linux 와 JDK 등을 무료로 사용할 있는 서브스크립션을 얻을 수 있다.

문제

RHEL 8.4 를 다운로드 받아서 서브스크립션 인증을 하고 설치까지 다하고 나서 이미지를 백업했다. 그런데, 시간이 얼마지나지 않아 RHEL 8.5 로 업데이트가 되었다. 이미지를 백업한 것은 Minimal Installation 을 유지하기 위한 것이였다.

RHEL 8.5 로 업그레이드를 하고 난 후에 문제가 있어서 다시 처음부터 해야할 상황이 되어서 RHEL 8.4 이미지를 가져와 부팅을 시켰다. 그리고 dnf 명령어를 이용해서 update 를 하려는데 다음과 같이 안되었다.

해결

subscription 관리 명령어를 제공 한다. 먼저 subscription 리스트를 확인해야 한다.

위와같이 활용가능한 서브스크립트가 나온다.

그러면 다음과 같이 서브스크립트를 업데이트해주면 되는데 다음과 같이 하면 된다.

이제 dnf 명령어를 이용해서 update 가 정상적으로 수행 된다.

참고

Red Hat Subscription Manager 를 사용하여 Red Hat 고객 포털 시스템에 등록하여 구독하는 방법

VIM 세팅

vim 은 리눅스의 기본 에디터이다. 많은 기능을 제공하지만 이 기능을 사용하기 위해서는 설정을 해야 한다. 그런데, 이런 설정을 하나하나 하기 보다는 간단하게 Plugin 형태로 제공해 네트워크를 통해서 설치를 도와주는 플러그인 프로그램이 있다. 이것을 이용해서 기본적인 세팅을 해보자.

VIM 세팅을 위해서 git 명령어가 설치되어 있어야 한다. 그리고 기본적으로 시스템 계정 홈디렉토리를 기본으로 한다.

또, 반드시 네트워크가 연결되어 있어야 한다. 443 이나 80 포트가 OutBound 로 열려 있어야 한다.

Vundle

VIM 플러그인 설치를 도와준다. 네트워크를 통해서 설치하고 픈 플러그인을 지정해주면 설치를 해준다. 플러그인에 대한 설정은 여전히 사용자가 해줘야 하지만 하나하나 찾아서 해주는 것보다는 낫다.

다음과 같이 Vundle 를 설치 해준다.

.vimrc 파일 작성

이제 다음과 같이 간단하게 .vimrc 파일을 작성해 준다.

위와같이 작성한 후에 vim 을 실행해 명령어 모드에서 다음과 같이 입력해줍니다.

이렇게 하면 화면이 분할되면서 왼쪽에 Vundle Plugin 이 설치 된다.

airline 상태바(statusbar) 설치

VIM 은 화면 하단에 상태 정보를 표시한다. 하지만 많은 정보를 표시하지도 않거니와 보기도 그렇게 좋지 않다. 그래서 좀 더 인식하기 좋고 정보도 많이 표시하도록 도와주는 플러그인이 필요한데 ariline 이 이를 도와준다.

다음과 같이 .vimrc 에 설정을 해준다.

그리고 맨 아래에 다음을 추가 한다.

중간에 airline_theme 는 .vim/bundle/vim-airline-themes/autoload/airline/themes/ 디렉토리에 있는 파일 이름을 적어주면 된다.

YAML 플러그인

YAML 파일이 많이 사용 된다. YAML 문법을 제공해 준다.

만일 Ansible 을 사용한다면 이 플러그인은 설치해서는 안된다.

Ansible 플러그인

Ansible 플러그인은 Ansible 을 위한 플러그인이기 때문에 Yaml 플러그인과 충돌 날수도 있다.

Nginx 플러그인

Nginx 플러그인은 nginx 의 설정 파일에 대한 문법 하이라이트를 제공 한다.

Trac 첨부 파일 삭제

Trac 은 위키나 티켓에 파일을 첨부할 수 있다. 하지만 첨부파일이 잘못되었을 경우에 삭제를 해야 하는데, 아쉽게도 Trac UI 에서 할 수가 없다. CLI 를 이용해서 다음과 같이 삭제할 수 있다.

삭제 명령어

삭제를 위해서는 CLI 명령어를 사용해야 하는데, 대략 다음과 같은 형식이다.

예를들어 첨부 파일에 파일명에 공백이 있을 경우에 위키나 티켓 본문에 넣을 방법이 없다. 따옴표로 감싸거나 %20 으로 HTML 엔터티로 바꿔놔도 안된다. 이럴때는 삭제하고 파일명을 바꾼뒤에 다시 첨부해야 한다. 삭제할때는 다음과 같이 할 수 있다.

위와같이 첨부파일에 공백이 있을 경우에 CLI 를 이용해서 삭제할 수 있다.

윈도우즈10 에 Trac 1.2 설치하기

2021년에 아직도 Trac 을 사용하는 사람이 있을지 모르겠다. 하지만 프리랜서로 많은 프로젝트를 하는데 있어서 Trac 만큼 간단하면서도 필요한 기능이 다 있는 툴은 찾기가 힘들다. 프로젝트에 투입되면 Windows 10에 Trac 을 설치하고 프로젝트를 위한 여러가지 작업을 Trac 으로 하게 된다. Trac 을 이용하는 기능은 다음과 같다.

  • Wiki
  • Ticket
  • Calendar
  • Gant Calendar

문서도 작성하고 요청한 사항들을 정리하고 일정을 확인하는데, 그것도 로컬 컴퓨터에서 Python 으로 아주 가볍게 동작하는 툴을 본적이 없다. Jira 와 같은 협업툴이 많이 나왔지만, 프리랜서로서 자신만의 뭔가를 정리하려고할때 이만한 게 없다.

Trac 1.2

현재 Trac 은 죽어가는 프로젝트다. 조만간에 아카이빙을 해야할 정도라고 해도 된다. 그도 그럴것이 현재 Python 2 버전에서만 작동된다. Python3 이 새롭게 나왔는데 이것으로 바꿀 생각이 없어 보인다. 그래서 이 문서는 (아마도) Trac 1.2 버전에 관해 마지막 설치 문서가 될 것이다.

Trac 1.2 버전이 많은 플러그인들을 지원한다. 최신버전의 경우에 개발이 중단된 플러그인들을 제대로 인식하지 못한다. 내부적으로 바뀐부분도 많아서 고칠려면 꽤 손이 가는 일이라 안하는게 낫다.

Trac 은 Python 프로젝트이기 때문에 Python 이 있어야 하고 그것도 2.x 버전을 필요로 한다.

Python 2.7 설치하기

Windows 용 Python 을 다운받아서 설치해야 하는데, 2021년 현재 2.7.18 이 마지막 버전이며 MSI 인스톨러를 파일을 다운받을 수 있다. 다운로드 받은 파일을 더블클릭해 설치해주는데, 설치 디렉토리를 나의 경우에 F:\Python27 로 해줬다.

Python2.7.18 (x64) 설치 – 모든 사용자든, 나 혼자든 원하는데로 선택하면 된다.
Python2.7.18 (x64) 설치 – 설치 경로를 F:\Python27 로 해준다.
Python2.7.18 (x64) 설치 – 설치 컴포넌트들은 기본으로 놔두고 Next
Python2.7.18 (x64) 설치 – 설치가 진행되고 완료 된다.

pip.exe 를 이용한 의존성 설치

Trac 은 Python 으로 제작되었지만, 여러가지 의존성 라이브리를 필요로 한다. 이를 설치하기 위해서는 pip 프로그램을 이용하는게 가장 쉽다. pip.exe 는 Python 설치 디렉토리에 Scripts 폴더에 존재한다.

먼저 pip.exe 자체를 최신버전으로 유지시켜주기 위해서 업데이트를 먼저 해준다.

Upgrade pip (터미널은 Fluent Terminal 이다)

이제 Trac 1.2 의존성 패키지를 설치해야 하는데, 관련 문서는 다음과 같다.

한가지, 데이터 저장소로 데이터베이스를 선택하지 않았다. 기본적으로 Trac 은 데이터저장소로 sqlite3 을 사용하는데, Python 2.7 에 기본 포함되어 있어 별도의 의존성을 설치할 필요가 없다.

Genshi, version > 0.6

Genshi 를 설치해 줘야 한다. pip 를 이용해서 설치 한다.

Babel, version 0.9.6 or ≥ 1.3, needed for localization support

지역화 번역을 사용하기 위해서 필요하다고 한다.

docutils, version ≥ 0.3.9 for WikiRestructuredText.

Wiki 기능을 위해서 설치해 준다.

Pygments for syntax highlighting

문법 강조를 위해서 설치해 준다.

pytz 도 설치해줘야 하지만 Babel 을 설치하면서 함께 설치되었다.

Trac 설치

Trac 설치는 1.2.6 버전을 설치해야 한다. pip 를 이용해서 설치해야 하는데, 특정 버전을 설치하기 위해서는 반드시 버전을 명시해줘야 한다. 그렇지 않으면 최신버전을 설치하게 되는데, 현 시점에서(2021.08.27) Trac 1.4 가 최신 버전이다.

성공적으로 설치가 완료 됐다.

Trac 프로젝트 만들기 – trac-admin.exe

이제 Trac 프로젝트를 만들어야 한다. Trac 은 원래 멀티 프로젝트를 지원하지 않는다. 대신 Trac 프로젝트라고 해서, 비유를 하자면 웹 서버 가상호스팅 처럼 여러 시스템 계정을 가상 호스팅 루트로 서빙하듯이 여러 프로젝트 디렉토리를 생성해서 이를 루트로 인식시켜 작동하도록 했다.

Trac 프로젝트를 만들기 위해서는 trac-admin.exe 를 이용하며 프로젝트 디렉토리를 지정해 주면 생성 된다.

꼭 기억해야 할 것이 Trac 프로젝트의 루트 디렉토리명과 프로젝트 이름이다. 데이터베이스는 sqlite3 을 이용하기로 했음으로 그냥 엔터치고 넘어간다.

그러면 뭔가 F:\LocalProject 디렉토리에 복사가 되고 프로젝트가 생성이 된다.

마지막으로 프로젝트 관리를 위한 관리자를 생성하고 권한을 부여 해야 한다.

admin 이라는 ID 를 추가하면서 퍼미션을 TRAC_ADMIN 으로 부여 했다.

TracAccountManager 설치

Trac 에 AccountManager 플러그인을 설치해 준다. AccountManager 는 Trac 웹UI 에서 사용자 인증과 생성, 삭제등 관리를 해줄 수 있게 도와주는 툴이다. pip 를 이용해서 간단하게 설치해준다.

로그인 인증 설정

admin 이라는 ID 로 로그인 인증을 위해서는 인증을 위한 방법을 먼저 정의해야 한다. 인증 방법에는 다음과 같이 두가지 방법이 있다.

  • Basic Auth by HTTP
  • Htdigest

나의 경우에는 Htdigest 방법을 사용한다. 이를 위해서 AccountManager 플러그인을 설치했다.  그리고 Htdigest 인증 파일을 작성해줘야 한다. 이를 위해서 다음과 같이 Htdigest 인증 파일을 만들어주는 trac-digest.py 파일을 이용한다.

위 소스를 trac-digest.py 로 저장한다. 그리고 다음과 같이 실행해 준다.

AccountManager 플러그인을 활성하고 이를 이용해서 이 인증 방법을 지정해준다. 다음과 같이 trac.ini 설정 파일을 편집해 준다.

Trac 실행

이제 실행을 해보자. 실행을 할때에 인증방식을 파라메터로 줘야 한다. 앞에서 users.htdigest 를 작성했기 때문에 이를 이용하는 방법이다.

–auth 파라메터를 줘야 한다.

Trac 접속

접속을 하면 위 화면 처럼 나온다. 멀티 프로젝트를 지원하진 않지만, 프로젝트별 링크가 생성되기 때문에 멀티 프로젝트가 가능한 구조인 것이다(?)

LocalProject 메인 화면

LocalProject 링크를 누르면 메인 화면이 나온다. 여기서 “로그인” 버튼을 클릭하면 HTTP 인증 창이 나오는데, users.htdigest 의 인증 정보를 입력하면 로그인 된다.

admin 계정으로 로그인하면 “관리” 버튼이 보인다.

일단 로그인 되었다면 성공적으로 세팅이 된 것이다.

Trac 관리

관리 페이지는 Trac 을 관리하기 위한 페이지다. TRAC_ADMIN 권한이 있어야지만 볼 수 있다. Trac 을 설치하고 나면 맨 먼저 해야 할 곳이 이 부분인데, 여기서 주로 플러그인에 대한 세팅을 한다거나 플러그인을 설치하고 설정을 해준다.

TracAccountManager 0.5.0

먼저 TracAccountManager 를 설정해 줘야 한다. 관리->플러그인을 클릭하면 현재 설치된 플러그인들을 볼 수 있는데, 그중에 TracAccountManager 를 볼 수 있다.

Trac 에 설치된 플러그인들

여기서 ConfigurationAdminPanel, UserAdminPanel 을 체크해 활성해 준다.

두개의 기능을 활성화 해준다.

이 두개의 기능을 활성화 하면 왼쪽에 Account 메뉴에 설정, Users 링크가 생성이 되는데, Users 에서는 사용자를 추가/삭제/수정하고 사용자에게 퍼미션을 웹을 통해서 부여할 수 있게 된다.

Account 관리 페이지에 Users 페이지. 사용자를 관리할 수 있게 된다.

이제 유용한 플러그인을 설치해 보자.

TracTocMacro

이 플러그인은 Table of Content 로 위키에 목차를 생성해 준다. 설치는 pip 를 이용해도 되고 직접 소스코드를 다운로드 받아서 설치해 줘야 된다. 링크는 다음과 같다.

소스를 다운로드 받아서 설치해 보자. 홈페이지에 들어가면 zip 파일로 압축된 파일을 다운로드 할 수 있도록 링크되어 있다. 다운받아서 압축을 해제해 준다.

Trac 프로젝트를 재시작해 주면 관리 페이지 플러그인에 목록에 나오고 활성화해 주면 된다.

TocMacro 플러그인 활성화

TicketCalendarPlugin

티켓에 대한 달력으로 표시해 준다. 이것도 소스를 다운로드 받아서 압축 해제하고 설치 해준다. TocMacro 처럼 활성화만 해준다. 이렇게 하면 상단 메뉴에

TicketCalendar 활성화 이후에 일정보기 메뉴가 생긴다

티켓을 생성하면 위 달력에 표시가 된다.

TracGanttCalendar

칸트 달력을 위한 플러그인이다. 티켓에 대한 것도 함께 출력을 해준다. 이 달력은 여러 플러그인에 대해서 표시를 해준다. 한가지, 마지막 소스코드 버전이 0.11 인데 이것은 국제화가 안되어 있어서 한글이 나오지 않는다.

그래서 SVN 에 있는 MultiLanguage 지원 버전을 다운로드 받아서 설치해야 한다.

그런데, 이것을 그대로 설치하면 오류가 발생한다. 이것은 데이터베이스 API 가 Trac 1.2 로 넘어오면서 변경되었는데 이것이 반영이 되지 않아서 이다. 다음과 같이 코드를 수정해 줘야 한다.

또, templates 디렉토리에 macros.html 파일을 작성해야 한다. 빈 파일로 해서는 안되고 다음과 같이 html 이 기본 뼈대만 갖도록 해준다.

이렇게 소스코드를 조금 수정해준 다음에 설치를 해준다.

설정을 조금 해줘야 하는데, 이것은 trac.ini 파일을 편집해줘야 한다. 다음과 같이 설정을 해준다.

이렇게 설정한 후에 Trac 프로젝트를 재 시작 해준다. 그러면 새로운 티켓 생성하기에서 다음과 같이 시작날짜와 만료날짜 Completed 가 나타난다.

Ticket 생성하기

이제 필요한 플러그인은 모두 설치가 되었다.

우선순위 번역

관리 페이지에 우선순위가 있다. 영문으로 되어 있는데 다음과 같이 번역을 해준다.

우선순위 한글로 번역

해결방법 번역

관리 페이지에 해결방법이 있다. 영문으로 되어 있는데 다음과 같이 번역을 해준다.

해결방법 한글로 번역

티켓 종류 번역

관리 페이지에 티켓 종류가 있다. 영문으로 되어 있는데 다음과 같이 번역을 해준다.

티켓 종류 한글로 번역

이렇게 모든 설치와 설정은 끝났다.

결론

이제는 팀 협업을 위한 툴들이 아주 많다. 굳이 Trac 을 사용할 필요도 없으면 협업툴을 익히는 것이 직장생활(?)을 오래하는 방법이기도 하다. 하지만 프리랜서로서 일을 할때에 협업툴도 사용을 하겠지만 개인적인 업무를 기록하고 업무요청을 Ticket으로 기록하는 것 만큼 좋은 방법은 없다고 생각하는데 Trac 이 여기에 딱 맞아 보인다.