아파치 서버데몬을 사용할 때, 디렉터리에 index.html이나 index.php 파일 등이 없으면 일반적으로 해당 디렉터리에 있는 파일들을 나열하거나, 혹은 보안상 이를 감추기도 한다. 일반적으로 -Indexes옵션을 붙였을 경우 아래처럼 나온다.

그런데, 굳이 디렉터리의 내용을 감출 필요가 없거나 혹은 내부를 보여줘서 직접 파일을 다운로드하게 할 필요가 있을 때는 직접 보여줘야하는데 일반적으로는 아래처럼 보여지게 된다.

 

이 멋없는 페이지도 개별적인 꾸밈이 가능하다. 설명은 우분투/데비안 기준으로 한다.

도메인이 여러 개가 있어서 특정 도메인에만 세팅할 경우 /etc/apache2/sites-available/에서 알아서 불러오시고, 그런 게 없는 경우는, 즉 다시 말해 잘 모르시겠다면 아래의 명령어를 입력한다.

$ sudo vi /etc/apache2/sites-available/default

그런다음, <Directory /var/www/>라고 적혀있는 부분을 찾아서,

Options으로 시작되는 라인에서 Indexes라는 글자가 있는지 보고 없으면 Indexes라고 적어준다.

예) Options Indexes FollowSymLinks MultiViews

그리고 그 아래에다 다음을 추가시켜준다.

IndexOptions +FancyIndexing +FoldersFirst

마지막으로, </directory>라고 적힌 라인 아래에다 다음을 추가시켜준다.

Include /etc/apache2/pretty-dir.conf

 

최종적인 모습은 다음과 같다. 다른 항목은 신경쓰지 말고, <Directory /var/www/>에서 시작해서 </Directory>로 끝나는 안의 내용과, 그 다음 줄인 Include /etc/apache2/pretty-dir.conf만 신경쓰면 되겠다. 혹시 몰라서 파일을 첨부한다.default.txt

그런다음, 방금 적어준 Include /etc/apache2/pretty-dir.conf 라는 파일의 내용을 작성하면 된다. 역시 파일을 첨부한다. pretty-dir.conf

여기서 주목할 부분은 5번째 라인, "IncludeStyleSheet /.style.css" 이다. 여기서 바로 페이지의 전체적인 모습을 결정한다. CSS로 작성하면 되고, 따라서 웹디자인이 가능하신 분은 알아서 작성해주시면 되겠다. 본인의 샘플은 다음과 같다.  style.css

물론 위치는 아무데나 적어주셔도 상관이 없다. 다만 출처의 예제에서는 디렉토리를 따로 만들어서 넣었지만, 굳이 그렇게까지 할 필요가 없어서 내 경우는 저렇게 했다. 알아서 바꿔주시면 되겠다. 완성된 화면은 다음과 같다.

 

출처: https://we.riseup.net/debian/pretty-directory-indexes

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,
블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

이것 때문에 무려 2시간이나 소비했다는 사실. 원인은 정말 쓸데없는 것이었는데...

방법을 공유하고자 한다. 이상하게 국내에는 장고 설치에 관한 블로그가 없다. 본 포스트는 장고를 설치하고 아파치의 mod_python 모듈로 운영하고자할 때 필요한 내용이다.

 

먼저 장고설치. 우분투 10.04 LTS 기준으로 아래의 명령어는 Django 1.1버전이 설치된다. 현재 최신버전은 1.3이며, 장고 홈페이지에서 직접 내려받아서 설치할 수 있다. 이 경우 설치되는 경로만 조금 다를 뿐, 작동은 정상적으로 한다.

sudo apt-get install -y libapache2-mod-python python-django python-django-doc

 

이제 장고가 정상적으로 작동되는지를 알아볼 차례.

sudo vi /etc/apache2/sites-available/django-example

<Location "/">
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    PythonDebug On
    PythonPath "['/usr/share/doc/python-django-doc'] + sys.path"
    SetEnv DJANGO_SETTINGS_MODULE examples.settings
</Location>

라고 작성해준 다음,

sudo a2dissite default

sudo a2ensite django-example

sudo service apache2 reload

(출처: https://wiki.ubuntu.com/Django)
 

이제 본인의 서버 혹은 컴퓨터로 접속을 해본다. 그러면 아래와 같은 화면을 볼 수 있다.

그러면 이제 나만의 페이지를 만들어볼 차례. 여기서부터 2시간 동안 삽질도 아닌 쌩쑈를 다 했다.

먼저 장고로 웹서비스를 할 디렉토리를 만든다. 예를 들기 위해, 필자의 유저네임은 jswlinux이며, 홈디렉토리는 /home/jswlinux 이다.

장고를 이용한 웹서비스는 /home/jswlinux/jswlinux.com에서 할 예정이라고 가정한다.

 

장고의 어드민 명령어로 초기화 파일을 생성해준다. 프로젝트의 이름은 myproject라고 가정한다.

$ mkdir ~/jswlinux.com

$ cd ~/jswlinux.com

$ django-admin startproject myproject

 

이제 ls를 해보면 myproject라는 폴더가 생성되어있는 것을 볼 수 있다. 그러면 아파치 설정파일을 작성해줄 차례다. /etc/apache2/apache.conf 파일에 작성하라고 되어있는데, 보통 일반적으로는 /etc/apache2/sites-available/ 밑에 작성하는 것이 관리도 수월하고 보기도 편하므로 그곳에 작성하기로 한다.

sudo vi /etc/apache2/sites-available/jswlinux.com

<VirtualHost *:80>

ServerName  seowonjung.com

ServerAlias www.seowonjung.com

DocumentRoot /home/jswlinux/seowonjung.com

<Directory />

Options FollowSymLinks Multiviews

AllowOverride all

</Directory>

 

LogLevel warn

ErrorLog /var/log/apache2/seowonjung.com-error.log

CustomLog /var/log/apache2/seowonjung.com-access.log combined

 

<Location "/django/">

SetHandler python-program

PythonHandler django.core.handlers.modpython

SetEnv DJANGO_SETTINGS_MODULE myproject.settings

PythonPath "['/home/jswlinux/jswlinux.com'] + sys.path"

PythonDebug On

</Location>

</VirtualHost>

 

위의 작성된 내용 중에서 글씨체가 굵게되어있는 곳을 주목해야하는데, 저 부분 때문에 2시간이나 삽질을 했던 거다.

먼저, 첫번째 <Location "/django/"> 라고 되어있는 부분은, 웹서버를 관리해보신 분이면 쉽게 아시겠지만, 웹사이트를 접속했을 때 최종경로를 지정하는 부분이다. 다시 말해, http://jswlinux.com/ 이라고 접속했을 때 장고로 서비스하는 페이지가 나오게 하고싶다면 <Location "/"> 라고 입력하면 되고, http://jswlinux.com/django/ 라고 입력해야 장고로 만들어진 페이지가 나오게 하고싶다면 위와 같이 하면 된다. 별것 아니지만, http://jswlinux.com/ 이라고 접속했을 때 바로 장고로 만들어진 페이지가 나오게 하고싶다면, 사실 상단의 VirtualHost에 해당하는 부분은 모두 삭제해도 상관없다.

두번째, 위의 django-admin startproejct myproject 라고 실행해서 만들어줬던 디렉토리를 넣으면 *절대로* 안된다. 프로젝트 폴더가 만들어진 상위 디렉토리를 넣어야한다. 다시 말해, django-admin 명령어로 만들어진 프로젝트 폴더의 경로가 /home/jswlinux/jswlinux.com/myproject라면, 위의 아파치 설정파일에는

PythonPath "['/home/jswlinux/jswlinux.com'] + sys.path"

까지만 넣어야한다는 사실이다. 여기서 myproject라는 장고 프로젝트의 이름은 그 윗 라인, SetEnv DJANGO_SETTINGS_MODULE myproject.settings 에서 판단한다는 사실을 추측해볼 수 있겠다. 저장하고 아파치를 reload 해준다.

이상 완료하면 다음과 같은 페이지를 볼 수 있다.

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

참고로, 맥에서만 가능하다.

 

from AppKit import NSPasteboard, NSArray

 

pb = NSPasteboard.generalPasteboard()

pb.clearContents()

strClipboard = NSArray.arrayWithObject_('Message Here')

pb.writeObjects_(strClipboard)

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

우분투 포럼 채팅방에서 일어난 일이었다. 어느 분께서 아파치 서버의 세팅을 뭘 잘못 손대셨는지 뭐가 잘 안된다고 하신다. 그러면서 재설치와 동시에 PHPMyAdmin 설정을 모두 할려고 하는데, 어떤 순서대로 설치를 해야하냐고 물으셨다. 일반적으로 APM의 설치는 다음과 같다.

sudo apt-get install apache2 libapache2-mod-auth-mysql

sudo apt-get install mysql-server mysql-client

sudo apt-get install php5 php5-common libapache2-mod-php5 php5-mysql

sudo apt-get install phpmyadmin

 

그런데, 다른 분께서 위의 명령어를 한 방에 정리하셨다.

sudo apt-get install phpmyadmin

 

그런데 사실이다!!! 생각해보면 phpmyadmin과 의존관계에 있는 패키지들이 모두 연결되어있다. 따라서, 인터넷에 나와있는 리눅스에서의 APM 설치법은 이제 위의 명령어 단 한 줄로 정리가 된다.

sudo apt-get install phpmyadmin (데비안 계열일 경우)

 

실제로 해봤다. 새로 포맷하고 새로 설치하는 컴퓨터에 해봤는데, 우분투나 데비안에서는 위의 명령어를 치기 전에 하나를 해줘야한다.

sudo apt-get install mysql-server mysql-client

왜냐하면, phpmyadmin이 설치되면서 DB의 root 비밀번호를 설정하는 입력화면이 나오는데, mysql-server의 비밀번호가 먼저 설정되어있지 않으면 설치가 제대로 되지않는다. 물론 잘 아는 유저들한테서야 별거 아니지만, 리눅스를 배우기 시작한지 얼마 안되는 분들한테는 엄청 당황스러울 거다. 따라서 우분투/데비안 유저라면 아래의 방법으로 APM을 설치한다.

 

sudo apt-get install mysql-server mysql-client

sudo apt-get install phpmyadmin

 

쉽고 간단한 APM 설치~

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

OWC Mercury Extreme Pro 6G라는 SSD를 하나 구입했다. 240GB이고 이름에 적힌대로 6Gbps를 지원하는 SATA3 제품이다.

한국에서 OWC를 아는 분들은 일부 맥 유저들 뿐이지만, 미국에서는 꽤 유명한 업체이다. 주로 맥용 주변기기나 부품들을 판매하는 업체인데, 자신이 사용하는 맥이나 맥북에 어떤 램/하드디스크 등이 인식되는지 잘 모르는 경우가 많기 때문에 OWC에서는 그러한 유저들을 위해 맥에서 인식이 잘되는 부품의 리스트를 나열하고 그것들을 판매하는 형태의 웹사이트였다.

그런데 이 OWC에서 램부터 시작하여 하나둘씩 자체적으로 부품을 제조하면서 맥유저들 사이에서 점점 입지를 자리잡아가고 있었는데, SSD에서 대박을 하나 터뜨렸다. 내가 구입한 이 모델이 현존하는 전 세계에서 가장 빠른 SSD라고 한다. 읽기쓰기 550 MB/s라는 어마어마한 속도에 프리징 현상도 없고 5년이라는 제품보증 기간과 TRIM이 필요없는 뛰어난 성능의 GC가 장착된 컨트롤러는 수많은 리뷰 사이트에서 인정한 현존 최강의 SSD라는 거다. 자세한 리뷰는 구글에서 제품명으로 검색하면 한국 모 사이트에서 리뷰한 페이지가 나오는데 리뷰가 아주 잘되어있으니 참고하시고.

그놈의 속도가 뭔지, 맥미니 서버를 팔고 SSD를 주문했는데 과연 디스크와 맥미니를 바꿀만한 값어치가 있는지 정말이지 한참이나 고민했다. SSD가 진리라는 소리는 수차례 들어왔고 봐왔지만 그게 정작 쓸려니 고민이 되는 것은 사실. 내 맥북의 사양은 맥북프로 15인치 2011 모델이다.

어찌됐든 주문은 했고 물건은 왔다. 오자마자 라이언을 클린설치를 하고, 하나하나 설정하려니 너무나도 귀찮고 할 게 많아서 도저히 유혹을 뿌리칠 수 없었다. 그냥 라이브러리 통째로 복사해버렸다. XBench라는 맥용 벤치마크 테스트를 돌리는데 이게 실행이 되다가 자꾸 멈추는 거다. 알고보니 만들어진지 오래된 프로그램이라 라이언에서는 더 이상 호환이 안된다. 따라서, XBench 실행시 디스크 테스트만 돌리도록 하자.

XBench

돌리고나니 이럴수가… 쓰기속도가 반 밖에 안나오는 것이다. 다시 말하면, 읽기성능은 그런대로 500메가 이상 나오는데, 쓰기성능이 200메가 정도 밖에 안나오는 것이다. 슬슬 짜증이 나기 시작했다. 분명 모 리뷰 사이트에서는 스펙 검증을 했을 때 제조사가 제시한 스펙대로 충분히 나왔고, 일부 항목에서는 스펙을 뛰어넘는 성능을 보여줬다고 했는데...

Ssd speedtest

 

OWC기술지원쪽이랑 약 1주일간 메일을 주고받았고 제품을 교환받기로 했다. OWC에는 Advanced Cross-Shipping 이라는, 물건을 먼저 보내주는 대신 해당 액수만큼을 신용카드에서 Hold해놓는 편리한 제도가 있어서 일단 물건부터 수령받았다.

UPS 2day Air로 와서 다다음날 바로 받았다. 뜯어서 연결하고 라이언을 클린설치했다. 그리고나서 바로 QuickBench를 돌리니 쓰기에서 초당 400메가 이상이 나왔다. 일단 예전 제품보다 2배 이상이 나왔으니 제 성능이 나왔다고 판단, 이제 이것저것 원래 쓰던 프로그램 등 이전의 상황을 복구했다. 대략 4시간 정도 걸린 것 같다. 귀차니즘으로 인해 Library 폴더를 갖다붙이고 싶은 마음이 간절했으니, 이전부터 클린설치 한 번 할려고 벼르고 있었던 터라 꾹 참고 하나하나 다 설정해줬다.

주변 지인들한테 늘상 하는 얘긴데, 맥은 사용자랑 착 달라붙는 경향이 있어서 모든 자료를 맥에 넣어놓는 습성이 있고 따라서 내 맥의 자료는 아주아주 중요했다. 개인적인 정보부터 시작해서 별게 다 있었으니. FileVault2 역시 나에겐 필수다. 나중에 하면 시간이 오래 걸리니, 벤치마크를 끝내자마자 바로 해놨다.

모든 복구가 끝나고나니 벤치마크 결과가 또 다시 궁금해서 한 번 더 돌려봤다. 그런데, 성능이 또 다시 반으로 줄었다. 분명 뭔가 있다...

 

이게 뭐가 문제인지 하나하나 찾아내려니 시간이 안되고, 꾹 참고 쓸려니 내가 이노무 속도 때문에 일부러 비싼 모델을 산게 아까웠고해서 웹서핑을 좀 해봤다. 힌트를 찾았다!

http://blog.macsales.com/11051-to-trim-or-not-to-trim-owc-has-the-answer

 

리플들을 읽다보니 "File Vault 2를 쓰는데 쓰기 속도가 너무 느리다"라는 리플이 발견된 것이다. 순간 눈 앞에서 불이 번쩍했다. 그렇다면, 처음 구매해서 받은 제품 역시 정상이었던가...

리플들을 계속 읽어내려가다보니 이 제품은 File Vault 2와 사용시 쓰기성능이 반으로 줄어든다는 결과가 있었다는 리플들이다. 아니, OWC Tech Support 직원은 이 사실을 알면서도 나한테 File Vault 2 쓰는지 물어보지도 않았단 말인가?

File Vault 2를 해제했고 퀵벤치를 돌렸다. 쓰기성능이 400메가 이상 나온다. 제길, 이거 알았으면 교환신청을 하고 계좌를 홀드하고 메일을 주고받고 이딴 짓은 안했을 거 아냐! 설마 그럴리는 없겠지만, UPS 반송 잘못되서 OWC에서 물건 못받았다고 내 계좌에서 돈 빼가면 진짜 골치아파지는거다...

SSD

드디어 시작된 진정한 SSD Life 고고씽~

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

제목은 거창하게 달았는데, 실상은 SSD 구입을 하게되면서 조사한 내용들이다.

이번에 구입하게된 SSD는 OWC의 Mercury Extreme Pro 6G 240GB인데, 현존하는 최고속도의 제품이라고 한다.

 

SSD는 특성상 쓰기 작업을 많이 하면 수명을 깎아먹는다더라. 따라서 캐쉬폴더를 램드라이브로 옮기거나 혹은 쓰기가 잦은 폴더의 기능을 꺼버리는 것이 좋다고 하는데, 그것을 알아보다가 알게된 몇 가지를 공유하고자 한다.

1. 맥에서는 파일에 마지막으로 접근한 시간을 기록하는데 이것이 필요없으면 끄도록 한다.

sudo touch /Library/LaunchDaemons/com.my.noatime.plist

sudo chown root:wheel /Library/LaunchDaemons/com.my.noatime.plist

이제 vi 혹은 nano를 열어서 내용을 적어넣는다.

<?xml version=“1.0” encoding=“UTF-8”?>

<!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>

<plist version=“1.0”>

<dict>

<key>Label</key>

<string>com.my.noatime</string>

<key>ProgramArguments</key>

<array>

<string>mount</string>

<string>-vuwo</string>

<string>noatime</string>

<string>/</string>

</array>

<key>RunAtLoad</key>

<true/>

</dict>

</plist>

재부팅 후, 터미널에서 mount 명령어를 입력하여 하드디스크(예 /dev/disk0s2 on / (hfs, local/jounaled, noatime) 이라고 나오면 정상이다.

 

2. 램이 많아서 스왑을 안쓸 것 같으면 스왑을 아예 꺼주자.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

 

3. SMS 끄기

컴퓨터를 떨어뜨렸을 때 하드디스크의 헤더를 안전한 곳으로 옮겨주는 종류의 명령어이다. SSD에서는 필요없다. 당연히 꺼준다.

sudo pmset -a sms 0

 

4. Sleep 모드 변경 및 하이버네이션 파일 삭제

sudo pmset -a hibernatemode 0

sudo rm /var/vm/sleepimage

 

5. 사파리 썸네일 끄기

defaults write com.apple.Safari DebugSnapshotsUpdatePolicy -int 2

 

6. 램디스크

현재 SSD 사용자들 사이에서 가장 이슈가 되고있는 부분이 바로 이 램디스크다.

하드디스크 입출력이 잦은 캐쉬 폴더 등을 아예 램에 일정공간을 만들어서 떼어주는데, 대다수의 블로거들은 램디스크를 만들어주는 프로그램을 별도로 이용하는 방식을 설명하고있지만 실은 맥OSX에서 자체적인 램디스크 생성이 가능하다.

먼저 램디스크에 올려도 될만한 디렉토리들을 나열해본다.

시스템

/private/var/tmp - /tmp 에 링크가 걸린 임시 디렉토리다. 유닉스 계열의 OS에서는 필수적인 디렉토리로서, 없으면 안된다.

/private/var/folders - 맥OSX에서 사용하는 임시 폴더이다. 경로는 echo $TMPDIR 을 입력하면 상세한 경로가 나오지만 아예 통째로 옮겨도 된다.

/private/var/vm - 스왑파일이 저장되는 곳이다.

 

개인용

개인용 홈폴더 안에서 사용되는 임시 디렉토리들인데, 편의상 내 폴더이름으로 기준을 정한다. 본인의 로그인 아이디는 jswlinux 이므로 /Users/jswlinux 부분에는 각자 알아서 자신의 로그인 아이디를 적으면 된다. 로그인 아이디를 잘 모르면 터미널에서 echo $USER 라고 입력하면 나온다.

/Users/jswlinux/Library/Cache/com.apple.Safari - 사파리의 캐쉬 폴더다.

/Users/jswlinux/Library/Cache/com.apple.Safaridavclient - DAV, 다시 말해 웹서버를 이용하여 원격지의 컴퓨터에 파일을 읽고쓰게 해주는 것과 관련된 캐쉬 폴더다. 뭔지 모르면 삭제항목에 넣어도 된다. 알면 당연히 넣을 거다.

/Users/jswlinux/Library/Cache/Google - 크롬이 사용하는 캐쉬 폴더이다. 실은 Google 폴더 아래 Chrome이라는 폴더가 있지만, 구글제품의 모든 캐쉬를 옮기고자 아예 통째로 넣어버렸다.

/Users/jswlinux/Library/Saved Application State - 사파리를 종료할 때, 탭이 여러 개 있는 상태에서 Cmd+Q를 눌러서 꺼본 적이 있으신가? 그렇다면 다시 사파리를 띄워보시라. 전의 상황을 그대로 복구해줄 것이다. 이 폴더는 그러한 기능을 제공하는 폴더이다. 다시 말해서, 프로그램이 종료될 당시에 작업하던 문서들이나 상황을 그대로 재현해주는 기능에 이용되는 폴더인데, 본인은 개인적으로 이게 너무 귀찮다. 작업은 내가 알아서 한다. 이게 필요하신 분들은 나중에 밑에서 빼시면 된다.

/Users/jswlinux/Library/Autosave Information - 맥을 종료할 때 다시 로그인하면 프로그램을 다시 띄울거냐고 물어보는 창을 보셨을 거다. 거기에 이용되는 폴더인데, 그 기능 귀찮으신 분이 여럿 있는 걸로 알고있다. 이게 기능을 꺼도 잘 안된다. 따라서 폴더 자체에 접근을 금지시키거나 하면 된다. 본인은 그냥 램디스크에 넣어버렸다. 어차피 재부팅되면 날아갈테니.

 

여기까지다. 각자의 상황에 맞게 미리 체크를 해두셨으면 이제 적용하는 단계에 들어가보자. 명령어 뒤에 붙은 # 표시는 주석이니 이 부분은 따라서 입력하시면 안된다.

램디스크 생성

cd /System/Library/StartupItems # 작업하기 편하게 디렉토리를 옮기자.

sudo mkdir RamFS # RamFS라는 이름의 폴더를 만든다.

sudo chown -R root:wheel RamFS # RamFS의 폴더 소유주를 root와 wheel 그룹으로 지정한다.

sudo chmod -R 755 RamFS #RamFS의 권한을 755로 지정한다 (기본값이다).

sudo mkdir /private/RamFS # 램디스크가 마운트 될 곳을 /private/RamFS로 지정했다. 물론 다른 곳으로 원하시면 원하시는대로 적으셔도 된다.

cat << "EOF" | sudo tee RamFS/RamFS > /dev/null # 이제 램디스크가 생성되는 내용을 입력한다. 주의깊게 보셔야한다.

#!/bin/sh

RAMDisk()

{

mntpt=$1

rdsize=$(($2*1024*1024/512))

echo "Creating RamFS for $mntpt"

dev=`hdik -drivekey system-image=yes -nomount ram://$rdsize`

if [ $? -eq 0 ] ; then

newfs_hfs $dev

eval `/usr/bin/stat -s $mntpt`

mount -t hfs -o union -o nobrowse $dev $mntpt

chown $st_uid:$st_gid $mntpt

chmod $st_mode $mntpt

fi

}


if [ -z $1 ]; then

echo "Usage: $0 [start|stop|restart] "

exit 1

fi

test -r /etc/rc.common || exit 1 . /etc/rc.common

StartService ()

{

ConsoleMessage "Starting RamFS disks..."

RAMDisk /private/RamFS 256 # 램디스크를 설정하는 부분이다. 단위는 메가바이트다.

mkdir /private/RamFS/tmp

mkdir /private/RamFS/folders

mkdir /private/RamFS/vm

# 여기서부터 위에 설명한 폴더들을 넣는다. 원하지 않는 폴더가 있으면 빼시길 바란다. 본인은 위의 리스트 전부 다 넣었다.

# 시작

mkdir /private/RamFS/com.apple.Safari

mkdir /private/RamFS/com.apple.safaridavclient

mkdir /private/RamFS/Google

mkdir "/private/RamFS/Saved Application State"

mkdir "/private/RamFS/Autosave Information"

# 끝

# 역시 마찬가지. 윗 부분에서 뺀 부분을 아래 항목에서도 똑같이 삭제해주면 된다.

# 시작

chmod 1777 /private/RamFS/tmp

chmod 755 /private/RamFS/com.apple.Safari /private/RamFS/com.apple.Safari /private/RamFS/com.apple.safaridavclient

chmod 700 "/private/RamFS/Saved Application State" /private/RamFS/Google

chown -R jswlinux:staff /private/RamFS/com.apple.Safari /private/RamFS/com.apple.Safari /private/RamFS/com.apple.safaridavclient /private/RamFS/Google "/private/RamFS/Autosave Information"

rm -rf /private/var/folders /private/var/vm /Users/jswlinux/Library/Caches/com.apple.Safari /Users/jswlinux/Library/Caches/Google/ /Users/jswlinux/Library/Caches/com.apple.safaridavclient "/Users/jswlinux/Library/Saved Application State" "/Users/jswlinux/Library/Autosave Information"

ln -s /private/RamFS/folders /private/var/

ln -s /private/RamFS/vm /private/var/

ln -s /private/RamFS/com.apple.Safari /Users/jswlinux/Library/Caches/

ln -s /private/RamFS/com.apple.safaridavclient /Users/jswlinux/Library/Caches/

ln -s /private/RamFS/Google /Users/jswlinux/Library/Caches/

ln -s "/private/RamFS/Saved Application State" /Users/jswlinux/Library/

ln -s "/private/RamFS/Autosave Information" /Users/jswlinux/Library/

 

# 끝

}


StopService ()

{

ConsoleMessage "Stopping RamFS disks, nothing will be done here..."

diskutil unmount /private/RamFS

}


RestartService ()

{

ConsoleMessage "Restarting RamFS disks, nothing will be done here..."

}

RunService "$1"

 

이제 실행에 필요한 plist 파일을 작성한다.

cat << EOF | sudo tee RamFS/StartupParameters.plist > /dev/null


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">

<plist version="0.9">

<dict>

<key>Description</key>

<string>RamFS Disks Manager</string>

<key>OrderPreference</key>

<string>Early</string>

<key>Provides</key>

<array>

<string>RamFS</string>

</array>

<key>Uses</key>

<array>

<string>Disks</string>

</array>

</dict>

</plist>

EOF

램디스크 생성은 여기까지가 끝이다.

참고로, 외국쪽 블로그에서 가져왔고 한 외국 포럼에서는 /private/var/run 폴더도 램디스크에 넣을 수 있다고는 했지만 실제로 그렇게 하면 제대로 작동되지 않았다. 대표적인 예로 인터넷이 되질 않았다. /etc/resolv.conf 파일을 별도로 작성해줘도 작동되지 않았으며, 또한 Dock, 상단 패널, 배경사진 등등 모두 제대로 나오지 않았다.

추가로 더 넣을 수 있는 임시/캐쉬 폴더가 있으면 알려주시면 감사하겠습니다.

 

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

노트가 너무 길어져서 각각의 글로 나눠서 포스팅했습니다.

 

http://jswlinux.tistory.com/category/Computer/Solaris%20/%20솔라리스

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

오픈솔라리스/오픈인디아나는 리눅스와 비교해서 여러모로 프로그램/패키지가 참 부족하다.

그래서 Gentoo Prefix on Solaris라는 프로젝트도 쓸만한데, 내 경험으로는 빌드가 안된다. 그래서 바이너리를 배포하는 좋은 곳이 있어서 소개해드린다.

아래의 명령어만 입력하면 된다.

pfexec pkgadd -d http://get.opencsw.org/now

위의 명령어에서 멈추는데, Ctrl+C를 눌러서 종료를 해도 괜찮다. 이미 pkgutil/opt/csw/bin에 다운로드 되어있다.

이제 /opt/csw/bin/pkgutil -v를 해서 만약 버전이 1.7이 나오면 업그레이드를 해준다.

pfexec pkgutil -u pkgutil

pkgutil -v


무슨 패키지가 있나 궁금하시면 http://www.opencsw.org/get-it/packages/ 여기를 가보시면 된다.

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

zfs list : zfs에서 마운트되는 디렉토리(?) 리스트. 이 리스트에 있어야만 스냅샷을 찍을 수 있다.

zfs list -o name -t snapshot : 스냅샷 리스트

zfs가 사용 중인 메모리 양 확인하기
kstat zfs:0:arcstats:size
또는

pfexec mdb -k 한뒤, ::memstat
종료할 때는 ::quit



ZFS 용 storage pool 생성 & filesystem 생성

zpool status: 현재 pool 상태 확인

zpool list: 현재 pool 리스트

zpool create -m /data externalHDD c1d0s0 c1d1s0 : /data 에 externalHDD라는 zfs파일시스템을 생성
* pool의 가장 상위 레벨 장치는 오프라인 전환이 불가능하며, destroy 실행시 모든 자료가 날아간다.


zfs에 파일시스템 추가하기

zfs create rpool/경로명 (만약 /var/apache2/2.2/htdocs를 추가하고 싶으면, /var, /var/apache2/,

/var/apache2/2.2/, /var/apache2/2.2/htdocs 모두 추가해야한다.

예: zfs create rpool/var; zfs create rpool/var/apache2)

zfs set mountpoint=원하는경로명 rpool/경로명

(예: zfs set mountpoint=/var/apache2/2.2/htdocs rpool/var/apache2/2.2/htdocs)

zfs set sharenfs=on rpool/경로명

zfs set compression=on rpool/경로명

zfs get compression rpool/경로명

(참고: /var/mysql은, mysql 설치 이후에 zfs로 파일시스템 생성 후 마운트 시켰을 경우 mysql 디비테이블이 모두 망가졌었음. 따라서 먼저 zfs에서 파일시스템을 먼저 만들어놓고 mysql 설치했음)



스냅샷 찍을 때

zfs list 했을 때,

jswlinux@server:/usr/lib/pkgconfig$ zfs list

NAME                              USED  AVAIL  REFER  MOUNTPOINT

rpool                            10.0G   137G    81K  /rpool

rpool/ROOT                       5.87G   137G    19K  legacy

rpool/ROOT/opensolaris           69.6M   137G  2.93G  /

rpool/ROOT/opensolaris-05.2010   5.80G   137G  5.60G  /

rpool/dump                       1.44G   137G  1.44G  -

rpool/export                     1.26G   137G    22K  /export

rpool/export/home                49.6M   137G    21K  /export/home

rpool/export/home/jswlinux       49.6M   137G  40.1M  /export/home/jswlinux

rpool/export/webserver           1.21G   137G    22K  /export/webserver

rpool/export/webserver/ROOT      1.21G   137G    19K  legacy

rpool/export/webserver/ROOT/zbe  1.21G   137G  1.20G  legacy

rpool/swap                       1.44G   138G   101M  -

jswlinux@server:/usr/lib/pkgconfig$


라고 나왔는데, / 아래의 디렉토리에 대해서 스냅샷을 찍을 경우 rpool/ROOT에 recursive 옵션을 붙여도 스냅샷은 찍히지 않는다. 반드시 현재 BE의 이름, 즉 다시 말해 rpool/ROOT/opensolaris-05.2010에 대해서 스냅샷을 찍어야한다.

zfs snapshot -r rpool/ROOT/opensolaris-05.2010@20111025

 


웹서버 사이트 파일들의 전용스냅샷을 위한 zfs 파일시스템 생성

zfs create rpool/var

zfs create rpool/var/apache2

zfs create rpool/var/apache2/2.2

zfs create rpool/var/apache2/2.2/htdocs

(아래 명령어에서, 마운트포인트가 이미 존재해서 안된다는 메시지가 나오면, cd /var/apache2/2.2; mv htdocs ht식으로 이름을 잠시 변경해준다)

zfs set mountpoint=/var/apache2/2.2/htdocs rpool/var/apache2/2.2/htdocs

mv ht/* htdocs/

chown -R root:bin htdocs

rm -rf ht

zfs set sharenfs=on rpool/var/apache2/2.2/htdocs

zfs set compression=on rpool/var/apache2/2.2/htdocs

zfs get compression rpool/var/apache2/2.2/htdocs

 

 

나의 스냅샷 리스트

/usr/sbin/zfs snapshot -r rpool/var/apache2/2.2/htdocs@`date +%m.%d.%Y-%H:%M`

/usr/sbin/zfs snapshot -r rpool/export/home/jswlinux@`date +%m.%d.%Y-%H:%M`

/usr/sbin/zfs snapshot -r rpool/var/mysql@`date +%m.%d.%Y-%H:%M`

/usr/sbin/zfs snapshot -r rpool/ROOT/opensolaris-01.02.2010@`date +%m.%d.%Y-%H:%M`

 


zfs 캐쉬파일시스템 만들기 (USB 메모리스틱이나 SD카드로)
장치명을 확인하기 위해 데스크탑에 마운트 된 메모리스틱/SD카드의 이름을 참고하거나 혹은 format 명령어로 확인한다. 만약 format 명령어로 나오지 않는 타입의 메모리의 경우 format -e로 확인한다.
cat /etc/mnttab |grep 장치명
umount /media/장치명

zpool add rpool cache 장치명

zpool status 에서 확인

 


기존 Pool에 장치 c1t4d0을 추가
zpool add zfs_stripe c1t4d0


 

ZFS pool 관리
zpool add zfs_stripe c1dt4d0
zpool create -m /vfs/vfs_M vfs_mirror mirror c1t5d0 c1t6d0: mirror Pool 생성 (mount point 설정)
zpool create -m /vfs/vfs_R vfs_raid raidz c1t2d0 c1t3d0 c1t4d0: RAIDZ pool 생성. 최소 3개 이상 묶어줌

 

 

Pool Import / Export (사실상 하드를 뗏다붙였다하는 용도로 쓸 수 있다고 보면 된다)

pool Export

zpool export -f vfs_raid : 파일의 권한을 다른 컴퓨터에게 주기위해 권한을 포기.

 

Pool Import

zpool import vfs_raid

zpool import -d /dev/dsk : export에서 포기한 권한을 검색


Pool 제거 (destroy는 모든 자료를 삭제하니 주의한다)

zpool destroy zfs_mirror

 

Pool 내에 device Off-line

zpool offline vfs_mirror c1t5d0

 

Pool 내에 device On-line

zpool online vfs_mirror c1t5d0

 

Pool 내의 disk문제로 인한 disk 교체

zpool replace vfs_raid c1t3d0 c1t6d0 : c1t3d0 을 c1t6d0 으로 교체

 

disk 제거와 추가

zpool detach vfs_raid c1t3d0 : c1t3d0 제거

zpool attach vfs_raid c1t6d0 : c1t6d0 추가


하드디스크 2개를 따로 추가해서, 별도의 zpool2라는 풀을 만들고 그 둘을 미러링하는 경우

zpool create zpool2 mirror c2d0s0 c2d1s0
zpool status zpool2


ZFS filesystem 관련 명령

기존 Pool(Dataset) 에서 Filesystem 추가 생성 (자식 파일 시스템 생성)

zfs create vfs_mirror/d1

zfs create vfs_mirror/d2

 

자식 파일 시스템의 Mount Point 변경

zfs set mountpoint=/vfs/data1 vfs_mirror/d1

 

부모 파일시스템의 Mount Point변경

zfs set mountpoint=/vfs/parent1 vfs_mirror

오픈인디아나/오픈솔라리스/오라클 솔라리스 등에서 버츄얼 박스 사용시,
zfs에 가상디스크를 생성하면, zfs 특성상 모든 메모리를 캐시로 사용하려고 해서 시스템 전체가 느려짐.
따라서 버츄얼박스가 사용하려는 디렉토리를 별도의 마운트 포인트로 잡아주고 캐쉬를 비활성화한다.
zfs set primarycache=none, secondarycacne=none pool


블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,