'apt-get'에 해당되는 글 2건

  1. 2009.07.07 우분투 8.10 활용 팁(Tips) 모음
  2. 2009.06.04 패키지 관리 속도 향상법 (emerge sync)
2009.07.07 18:54

우분투 8.10 활용 팁(Tips) 모음

1. 입력시 빨간 줄 없애기
몇몇 어플에서 그놈 2.24 의 영문 입력철자 검사 때문에 빨간 줄이 나오는데, 한글은 소용이 없고 한글은 전부 빨간 줄이 쳐집니다.

입력시 빨간 줄이 나오는 프로그램의 환경설정(기본설정)에서 철자 검사 관련 체크를 뻬시기 바랍니다.
피진 경우는 재시작 해야 합니다.

2. 네이트온 설치, 피진네이트온 설치
이젠 그냥 저장소에서 설치가 됩니다.
네이트온 sudo apt-get install nateon
피진 네이트온 sudo apt-get install pidgin-nateon

3. DVD 지원 및 미지원 코덱 설치 (미디분투)
저장소 추가
$ sudo wget http://www.medibuntu.org/sources.list.d/intrepid.list -O /etc/apt/sources.list.d/medibuntu.list
GPG 키 입력
$ wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add -
저장소 정보 갱신
$ sudo apt-get update
설치
$ sudo apt-get install -y ubuntu-restricted-extras non-free-codecs w32codecs totem-mozilla libdvdcss2

4. 펄스오디오 문제로 알사로 사운드 사용 하기.
pulseAudio 사운드 서버는 아직도 진화중이죠 ^^
펄스오디오가 각 프로그램별로 사운도 량을 맞주어 쓸수 있다고는 하나..
여러 시스템에서 문제가 보고 되고 있습니다.

오직 ALSA 로 만 바꾸고 한번 같은 증상이 있나 살펴 보시기 바랍니다.

$sudo killall pulseaudio
$sudo alsa force-reload

하신후 시스템 /기본설정 /소리 에서 ALSA 믹서 등으로 ALSA 로 전부 변경 후에도 같은 문제가 발생하는 지 확인하여 보시기 바랍니다.

5. 버추어 박스 Full 설치
소프트웨어 소스 / 써드파티소프트웨어에 deb http://download.virtualbox.org/virtualbox/debian intrepid non-free 추가
다시 읽기 후 시넵틱에서 CTRL+F 로 검색 키워드 virtualbox
virtualbox-2.0 선택하여 설치 또는
$ sudo apt-get install virtualbox-2.0
USB 사용 가능 한 2.0.4 버전이 현재 설치 됩니다.

6. Wine 최신 설치
소프트웨어 소스 /써드파티소프트웨어에
deb http://wine.budgetdedicated.com/apt intrepid main 추가
다시 읽기 후
gpg 사인키 입력
wget -q http://wine.budgetdedicated.com/apt/Scott Ritchie.gpg -O- | sudo apt-key add -
$ sudo apt-get install wine
현재 8.10 용 1.1.12 이 설치 될것 입니다.

7. NVIDIA 사용시 로고 안보기
/etc/X11/xorg.conf 편집
$ sudo gedit /etc/X11/xorg.conf
Section “Device” 에 Option “NoLogo” “True” 라인 추가
예)
Code:
Section “Device”
Identifier    “Configured Video Device”
Driver    “nvidia”
Option    “NoLogo”    “True”
EndSection

8. compiz 에서 창타이들 말아 올리기 사용하기
터미널로 아래 빨간 내용 복사 하여 입력(붙여넣기)
gconftool-2 -s -t string /apps/gwd/mouse_wheel_action shade

바로 적용 됩니다. 타이틀(제목표시줄)서 휠버튼 돌려 보세요.

9. 업데이트로 인해 다운된 deb 패키지 지우기
보통 새 배포판은 업데이트가 많이 이루어 집니다.
그때 마다 우분투는 /var/cache/apt/archives 에 deb 파일을 가지게 됩니다.

용량 확보를 위해 지워 주는건
$ sudo apt-get clean 하시면 됩니다.

10. unzip 5.52-12 (cp949패치 버전)
unzip이 MS OS에서 압축한 zip 파일 경우 한글 이름이 깨져 풀리는데, 터미널에서 옵션을 주고 풀수도 있지만 (unzip -O cp949 [파일명] )
X-윈도의 파일룰러 통해 풀면 한글이름이 다 깨져 나옵니다.

따라서 cp949 패치하여 인트레피드용도 우분투 코리아팀 PPA에 업로드 하였습니다.
https://launchpad.net/~ubuntu-ko/+archive

PPA가 좋은 점은 32비트 64비트를 알아서 컴파일 해준다는 것입니다. 우분투 코리아팀 저장소를 추가 하시거나 직접 다운받아 설치하셔도 됩니다.

우분투 코리아팀 저장소

Code:
deb http://ppa.launchpad.net/ubuntu-ko/ubuntu intrepid main
deb-src http://ppa.launchpad.net/ubuntu-ko/ubuntu intrepid main

다운로드
32비트 http://ppa.launchpad.net/ubuntu-ko/ubuntu/pool/main/u/unzip/unzip_5.52-12ubuntu-ko1_i386.deb
64비트 http://ppa.launchpad.net/ubuntu-ko/ubuntu/pool/main/u/unzip/unzip_5.52-12ubuntu-ko1_amd64.deb

설치 후에도 압축 푼 파일에서 한글이름이 깨진다면 p7zip 패키지를 제거하시기 바랍니다.
sudo apt-get remove p7zip p7zip-full

11. 무선랜 사용
무저건 우선 백포트 모둘 부터 설치하고 재부팅 해보십시요.
sudo apt-get install linux-backports-modules-intrepid
백포트 모듈에는 무선관련 드라이버와 사운드 관련 드라이버가 내재돼 있습니다.
설치 후 재부팅 하여 되는지 보시기 바랍니다.

12. mplayer 한글 메뉴 / 설정
Mplayer 는 po/mo 번역 파일을 이용 하지 않고 컴파일시에 언어 설정으로
메뉴와 / 설정 등의 언어를 정하게 되어 있습니다.
따라서 한글 메뉴 컴파일 하여 코리아팀 PPA 에 업로드 하였습니다.

이용 방법은 unzip와 동일합니다.

Code:
소프트소스에 추가
deb http://ppa.launchpad.net/ubuntu-ko/ubuntu intrepid main
deb-src http://ppa.launchpad.net/ubuntu-ko/ubuntu intrepid main

직접 다운로드는
http://ppa.launchpad.net/ubuntu-ko/ubuntu/pool/main/m/mplayer

13. x 로고를 살펴 봅시다.
8.10에서 부터 사용 못하게된 x 설정 옵션들이 있는데
/var/log/xorg0.log살펴보니 ww , EE 를 내고 있었습니다.
모듈 부분 type1

터미널서 vi 나 mc, gedit로 볼수도 있으나. 관리의 시스템 로그 보기에서 xorg.log 를 살펴보시기 바랍니다.
WW = 경고 EE = 에로 (경고는 머 무시해도 되나 EE는 바로 잡으세요) 

홈 디렉토리에 ~/.xsession-errors 도 살펴보시기 바랍니다.
사용중 나는 경고는 프로그램 때문에 그런다 쳐도 로그인시 나는 오류는 다 잡아보시기 바랍니다.

14. 컴피즈 설정 한글화 파일 (메타 XML)
컴피즈 설정 한글화 파일입니다.
download/file.php?id=1854
gksu nautilus 실행하여
/usr/share/compiz 디렉토리를 이름 바꾸신 후
첨부 파일 압축 풀어 /usr/share 에 compiz 디렉토리 이름으로 복사하시면 됩니다.

15. 와이드 모니터용 Usplash

Usplash는 우분투가 부팅할 때 보이는 막대그림입니다.
와이드사용자는 좀 찌그려져 보이는데 와이드 사용자용 픽스 입니다.

컴파일러 설치 되야 합니다.
download/file.php?id=1856

Code:
sudo apt-get install libusplash-dev
make
sudo cp usplash-theme-wideubuntu.so /usr/lib/usplash
sudo rm /etc/alternatives/usplash-artwork.so
sudo ln -s /usr/lib/usplash/usplash-theme-wideubuntu.so /etc/alternatives/usplash-artwork.so

sudo cp /boot/grub/menu.lst /boot/grub/menu.lst.backup 그럽메뉴 백업
sudo gedit /boot/grub/menu.lst 편집
커널 라인 끝에 vga=791 기입

예) kernel /boot/vmlinuz-2.6.27-7-generic root=UUID=3dca6051-5877-438c-94c5-f5ff7803d851 ro quiet splash 를
   kernel /boot/vmlinuz-2.6.27-7-generic root=UUID=3dca6051-5877-438c-94c5-f5ff7803d851 ro quiet splash vga=791와 같이

그런 다음
sudo update-initramfs -u
sudo update-grub

16. 네트웍 고정하기
8.10부터는 네트웍 매니저가 네트워크를 담당합니다.
시작데몬은 /etc/init.d/NetworkManager 입니다.
네트웍 상황이 변하는 노트북이나 또 여러 인터넷 사용 구성에 적합하긴 하나 랜카드 하나 유선 사용자 에겐(eth0) 고정 IP 사용에는 불편합니다. 따라서 이를 예전 방식으로 사용하기 위해선 /etc/init.d/networking 데몬을 사용해야 합니다.
터미널에서 수동으로 /etc/network/interface 편집 후
$ sudo sysv-rc-conf 를 이용하여 런레벨 2에 NetworkManager 체크를 없애고 networking 체크하여 데몬을 활성화 시키면 됩니다. DHCP 지정도 가능합니다.


출처 : http://blog.daum.net/luckyman717


Trackback 0 Comment 0
2009.06.04 15:23

패키지 관리 속도 향상법 (emerge sync)

Speeding up portage with cdb -- UPDATE

When it comes to speed the database backend of portage is rather slow because it's implemented as a raw abstraction in the filesystem. It is possible to replace this with a mysql backend which is not ideal, if you don't want to start a full-blown RDBMS. My solution is rather tiny, if you compare the code and the packages you need for that:

  1. You'll need the python interface python-cdb for DJB's cdb
    Code:
    emerge python-cdb

  2. Create /usr/lib/portage/pym/portage_db_cdb.py and put this in it:
    Code:
    # Copyright 2004, 2005 Tobias Bell <tobias.bell@web.de>
    #
    # This program is free software; you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation; either version 2 of the License, or
    # (at your option) any later version.
    #
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with this program; if not, write to the Free Software
    # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

    import portage_db_template
    import os
    import os.path
    import cPickle
    import cdb


    class _data(object):

        def __init__(self, path, category, uid, gid):
            self.path = path
            self.category = category
            self.uid = uid
            self.gid = gid
            self.addList = {}
            self.delList = []
            self.modified = False
            self.cdbName = os.path.normpath(os.path.join(
                self.path, self.category) + ".cdb")
            self.cdbObject = None

        def __del__(self):
            if self.modified:
                self.realSync()

            self.closeCDB()

        def realSync(self):
            if self.modified:
                self.modified = False
                newDB = cdb.cdbmake(self.cdbName, self.cdbName + ".tmp")
               
                for key, value in iter(self.cdbObject.each, None):
                    if key in self.delList:
                        if key in self.addList:
                            newDB.add(key, cPickle.dumps(self.addList[key], cPickle.HIGHEST_PROTOCOL))
                            del self.addList[key]
                    elif key in self.addList:                   
                        newDB.add(key, cPickle.dumps(self.addList[key], cPickle.HIGHEST_PROTOCOL))
                        del self.addList[key]
                    else:
                        newDB.add(key, value)
                   

                self.closeCDB()

                for key, value in self.addList.iteritems():
                    newDB.add(key, cPickle.dumps(value, cPickle.HIGHEST_PROTOCOL))
               
                newDB.finish()
                del newDB
               
                self.addList = {}
                self.delList = []

                self.openCDB()

        def openCDB(self):
            prevmask = os.umask(0)
           
            if not os.path.exists(self.path):
                os.makedirs(self.path, 02775)
                os.chown(self.path, self.uid, self.gid)
               
            if not os.path.isfile(self.cdbName):
                maker = cdb.cdbmake(self.cdbName, self.cdbName + ".tmp")
                maker.finish()
                del maker
                os.chown(self.cdbName, self.uid, self.gid)
                os.chmod(self.cdbName, 0664)

            os.umask(prevmask)
               
            self.cdbObject = cdb.init(self.cdbName)

        def closeCDB(self):
            if self.cdbObject:
                self.cdbObject = None


    class _dummyData:
        cdbName = ""

        def realSync():
            pass
        realSync = staticmethod(realSync)


    _cacheSize = 4
    _cache = [_dummyData()] * _cacheSize


    class database(portage_db_template.database):   

        def module_init(self):
            self.data = _data(self.path, self.category, self.uid, self.gid)

            for other in _cache:
                if other.cdbName == self.data.cdbName:
                    self.data = other
                    break
            else:
                self.data.openCDB()
                _cache.insert(0, self.data)           
                _cache.pop().realSync()
               
        def has_key(self, key):
            self.check_key(key)
            retVal = 0

            if self.data.cdbObject.get(key) is not None:
                retVal = 1

            if self.data.modified:
                if key in self.data.delList:
                    retVal = 0
                if key in self.data.addList:
                    retVal = 1
               
            return retVal

        def keys(self):
            myKeys = self.data.cdbObject.keys()

            if self.data.modified:
                for k in self.data.delList:
                    myKeys.remove(k)
                for k in self.data.addList.iterkeys():
                    if k not in myKeys:
                        myKeys.append(k)
                       
            return myKeys

        def get_values(self, key):
            values = None
           
            if self.has_key(key):
                if key in self.data.addList:
                    values = self.data.addList[key]
                else:
                    values = cPickle.loads(self.data.cdbObject.get(key))

            return values
       
        def set_values(self, key, val):
            self.check_key(key)
            self.data.modified = True
            self.data.addList[key] = val

        def del_key(self, key):
            retVal = 0
           
            if self.has_key(key):
                self.data.modified = True
                retVal = 1
                if key in self.data.addList:
                    del self.data.addList[key]
                else:
                    self.data.delList.append(key)

            return retVal
                       
        def sync(self):
            pass
       
        def close(self):
            pass


    if __name__ == "__main__":
        import portage
        uid = os.getuid()
        gid = os.getgid()
        portage_db_template.test_database(database,"/tmp", "sys-apps", portage.auxdbkeys, uid, gid)


  3. Create /etc/portage/modules and fill in
    Code:
    portdbapi.auxdbmodule = portage_db_cdb.database
    eclass_cache.dbmodule = portage_db_cdb.database


  4. Now you'll have to regenerate the portage cache with
    Code:
    emerge metadata

Now try some searches with emerge especially with --searchdesc :wink:
Code:
emerge --searchdesc python
should be much faster than before. You can compare the performance by switching back to the normal
db module. Just make a
Code:
mv /etc/portage/modules /etc/portage/__modules
I hope you enjoy your accelerated portage.



Default portage
Code:
cd /var/cache/edb/dep/usr
rm * -Rf
time emerge metadata
real    0m40.575s
user    0m26.260s
sys     0m9.592s

time emerge -S mozilla
real    1m46.003s
user    1m36.215s
sys     0m8.721s

time emerge -upDv world
real    0m14.678s
user    0m13.289s
sys     0m1.130s


python-cdb powered portage
Code:
cd /var/cache/edb/dep/usr
rm * -Rf
time emerge metadata
real    2m18.022s
user    0m26.538s
sys     0m31.505s

time emerge -S mozilla
real    1m39.624s
user    1m32.628s
sys     0m5.418s

time emerge -upDv world
real    0m13.856s
user    0m12.986s
sys     0m0.727s



## emerge 명령어 사용법 ##


emerge 옵션 테이블

Option1 Option2 기능
-s search 프로그램 찾기 및 각 프로그램에 대한 설명 참조 가능
-p pretend 프로그램 설치 이전, 설치를 가정하고 어떤 일이 벌어지는지 확인 가능
-v -- pretend 옵션과 더불어 쓰이며, 설정 혹은 비설정 use 옵션 확인 가능
unmerge 설치된 패키지 삭제 옵션,(>,<,=)기호 사용시 특정 버젼선택 삭제가능
help 자세한 설명 필요할때
rsync 포테이지 트리 업데이트 옵션
fetchonly 필요한 압축파일을 다운로드(컴파일안함)
emptytree 포테이지가 패키지및 의존성을 만족하는 패키지들이 모두 설치되지 않은것으로 인식
nodeps 의존성을 무시하고 패키지 설치(컴파일 실패 가능성..있음)
onlydeps 패키지의 의존성을 만족시키기 위한 것들만 설치(지정 패키지 설치안됨)
noreplace 이미 설치되어 있다면 패키지 설치를 생략
usepkg 컴파일이 아닌 이미 컴파일된 바이너리로 설치시도(PKGDIR 환경변수값 이용)
debug ebuild에 기초한 bash스크립트 문법적 에러를 추적할때 사용
autoclean emerge가 패키지의 빌드를 시작하기전에 임시 빌드 디렉토리 강제 청소
verbose emerge가 더 많은 정보를 표시
update 패키지 업데이트시 사용
prune 가장 마지막으로 설치된 버전을 제외하고 모든 패키지의 모든 버전들을 제거


사용법 emerging

사용법 1. emerge package_name
 # emerge mozilla
사용법 2. emerge dir/package_name rsync처럼 패키지명이 emerge의 특정 옵션으로 사용될 경우에 사용
# emerge net-misc/rsync
사용법 3. emerge emergefile 특정 버전을 설치할 때 사용
# emerge mozilla-1.3-r1.ebuild


portage tree 동기화

# emerge sync
or
# emerge rsync

/usr/portage의 개인 설정이 있다면 전부 삭제됨
sync와 rsync는 완전히 동일하게 작동합니다. /lefthander
메뉴얼에서는 rsync가 sync보다 서버의 부하를 덜 주어서 될수 있으면 rsync를 이용해 달라는 당부의 글이 있습니다.
아마도 sync는 모든 파일을 갱신하고 rsync는 없는 파일만 갱신하는것이 아닌가 싶습니다.

# emerge-webrsyncsync

보다 속도가 더 빠름. 스냅샷 압축파일을 받아와서 동기화


portage tree 갱신

# emerge -up system
# emerge -up world 
업데이트할 수 있는 system, world 패키지 확인

# emerge system
시스템 패키지 업데이트

# emerge world
world 패키지 업데이트

system과 world를 업데이트할 때 -u (--update) 옵션을 사용하면 의존성 있는 패키지도 함께 갱신한다.
이 의존성에 걸리는 패키지는 다운그레이드될 수 있다.


패키지 인스톨 전 확인

# emerge --pretend [package name]
or
# emerge -p pornview
# emerge -pv [package_name | ebuildfile]
설치할 패키지가 이미 설치되어 있는지, 의존관계 등의 정보를 확인


패키지 인스톨

#emerge [package name]


변경점 확인

#emerge --changelog [package name] or emerge -pl [package name]
이미 설치된 패키지와 portage상의 최신 패키지와의 차이 표시


패키지 갱신

#emerge [package name]



## 패키지 관리 명령어 비교 (yum / emerge / apt-get) ##


1. 패키지 목록 업데이트

====Fedora====
root@Fedora # yum check-update 
====Gentoo====
root@Gentoo # emerge --sync
====Debian====
root@Debian # apt-get update

2. 최신 패키지로 업데이트
====Fedora====
root@Fedora # yum update
====Gentoo====
root@Gentoo # emerge -DNu world
====Debian====
root@Debian # apt-get upgrade

3. 패키지 설치
====Fedora====
root@Fedora # yum install <packagename>
====Gentoo====
root@Gentoo # emerge <packagename>
====Debian====
root@Debian # apt-get install <packagename>

4. 패키지 재설치
====Fedora====
root@Fedora # yum update <packagename>
====Gentoo====
root@Gentoo # emerge --oneshot <packagename>
====Debian====
root@Debian # apt-get install --reinstall <packagename>

5. 패키지 검색
====Fedora====
root@Fedora # yum search <packagename>
====Gentoo====
root@Gentoo # emerge --searchdesc <packagename>
====Debian====
root@Debian # apt-cache search <packagename>

6. 패키지 삭제
====Fedora====
root@Fedora # yum remove <packagename>
====Gentoo====
root@Gentoo # emerge --unmerge <packagename>
====Debian====
root@Debian # apt-get remove <packagename>
 
참고 : http://wiki.kldp.org/wiki.php/PackageMgmt

Trackback 1 Comment 0