過去我在部落格上貼過一些 Linux 的安裝記錄,不過對於 Debian GNU/Linux 安裝的部份,似乎就沒有自己整理一些比較連貫的文章。這幾天我將手邊跑 Debian 那台 ThinkPad X61 重新安裝,順便整理了一下安裝的過程。至於本文的擷圖部份,為了方便操作,所以我利用 KVM / libvirt 也裝了一個同樣的 Debian 環境,然後在 Windows 下配合 Xshell 和 Xming 秀出視窗,再用 PicPick 擷圖。
Step 1.
對於安裝 Debian GNU/Linux,我經常會參考這兩篇文章:
在第一篇文章裡介紹了圖形化的安裝方式 (Graphical install),不過我比較偏好採用文字介面的方式 (Install) 來安裝 Debian GNU/Linux。
在安裝過程中,我會先安裝 SSH 伺服器和基本的工具 (Standard system utilities):
這是因為這陣子以來,我習慣將 Debian 作為遠端登入操作的選擇,所以並不特別需要安裝桌面套件。在安裝完基本的系統後,就可以在文字介面登入 Debian 了。
Step 2.
當第一次登入 Debian 後,我會執行 su -
指令變成 root 身份,然後執行下面的指令安裝 ufw 及 sudo。
$ sudo apt-get install ufw sudo
接著,參考《在 Debian 上使用 ufw 設定防火牆》這篇文章啟用 ufw 並設定防火牆。
然後,再執行 visudo
指令修改 /etc/sudoers,讓安裝基本系統時建立的使用者帳號能使用 sudo 指令。
Step 3.
修改 /etc/apt/sources.list 的內容如下,目前我偏向採用 Stable 的版本,雖然它的軟體不一定是當前的最新版本,但穩定度很高。而我的習慣是將 Debian 當作伺服器來用,所以就選擇這個版本了。
# stable deb http://http.us.debian.org/debian/ stable main contrib non-free deb-src http://http.us.debian.org/debian/ stable main contrib non-free # stable-updates, previously known as 'volatile' deb http://http.us.debian.org/debian/ stable-updates main contrib non-free deb-src http://http.us.debian.org/debian/ stable-updates main contrib non-free # security / stable deb http://security.debian.org/ stable/updates main contrib non-free deb-src http://security.debian.org/ stable/updates main contrib non-free
Step 4.
一直以來,我將安裝 Debian GNU/Linux 時需要安裝的套件寫成了腳本,接著只要執行這個腳本就可以將大部份需要的套件全部安裝好。
#!/bin/bash # Get information from Debian GNU/Linux VERSION=`cat /etc/debian_version` ARCH=`uname -a | awk '{print $8}'` # Get Account's ID THIS_ID=`echo $HOME | cut -d '/' -f 3` echo Hello $THIS_ID, your system is Debian GNU/Linux $VERSION, $ARCH. PKG_BASIC="xserver-xorg-core xinit" PKG_I18N="ttf-arphic-ukai ttf-arphic-uming ttf-kochi-gothic ttf-kochi-mincho ttf-sazanami-gothic ttf-sazanami-mincho ttf-sawarabi-gothic ttf-sawarabi-mincho ttf-wqy-microhei ttf-wqy-zenhei msttcorefonts" # Development PKG_EDITOR="vim ctags cscope global" PKG_COMPILER="make gdb gcc build-essential gcc-multilib g++-multilib gdb-multiarch" PKG_LIBS="libncurses5-dev libnetpbm10-dev libsdl-dev libesd0-dev zlib1g-dev liblzo2-dev libusb-dev libreadline6-dev binutils-dev libc6-dev linux-libc-dev libx11-dev xorg-dev libpam-dev libxrender-dev libgl1-mesa-dev libgl1-mesa-glx libxml2-dev x11proto-core-dev" PKG_UTILITIES="gnupg minicom lrzsz netpbm libtool bison flex doxygen indent fakeroot valgrind gperf zip curl uboot-mkimage tmux binutils ccache intltool mtools alien gawk pngcrush schedtool mingw32 tofrodos python-setuptools python-markdown xsltproc libxml2-utils python-libxml2 genext2fs genisoimage syslinux squashfs-tools" PKG_DOCS="pinfo info2man manpages manpages-dev manpages-posix manpages-posix-dev glibc-doc glibc-doc-reference" PKG_KERNEL="linux-headers-$(uname -r) kernel-package firmware-linux firmware-linux-free firmware-linux-nonfree" PKG_VCTRL="git-core git-cola git-cvs git-svn gitk cvs subversion mercurial mercurial-git" PKG_JAVA="openjdk-7-jdk" PKG_EXTRA="" # Service PKG_SERVICE="samba samba-tools libpam-smbpass ssh" # Packages depond on 32-bit or 64-bit case $ARCH in "x86_64") PKG_ARCH="libc6-dev-i386 lib32ncurses5-dev lib32readline6-dev lib32z-dev binutils-multiarch" ;; "i686") PKG_ARCH="" ;; esac # All packages PACKAGES="$PKG_BASIC $PKG_I18N $PKG_EDITOR $PKG_COMPILER $PKG_LIBS $PKG_UTILITIES $PKG_DOCS $PKG_KERNEL $PKG_VCTRL $PKG_JAVA $PKG_EXTRA $PKG_SERVICE $PKG_ARCH" # If running Gnome, you can use DEBIAN_FRONTEND='gnome' to show Gnome's dialog. sudo apt-get update sudo apt-get -y --force-yes dist-upgrade sudo apt-get install -y --force-yes $PACKAGES echo 'done.'
Step 5.
Debian GNU/Linux 7 並沒有收錄 Oracle 的 Java JDK / JRE,因此在安裝時我會先安裝上 OpenJDK 7。但,接著我仍然會再將 Oracle JDK 6 安裝起來。
首先自 Oracle 的網站找到 JDK 6 的 Linux 版本,由於這裡我安裝的是 64 位元的 Debian,因此下載了 jdk-6u45-linux-x64.bin 這個檔案。
執行 jdk-6u45-linux-x64.bin 這個檔案,會解壓縮並得到 jdk1.6.0_45 這個目錄,將這個目錄搬移到 /usr/lib/jvm/ 目錄內。
接著建立 /usr/lib/jvm/.jdk1.6.0_45.jinfo
這個檔案,內容如下:
name=jdk1.6.0_45 alias=java-6-oracle priority=63 section=non-free jre ControlPanel /usr/lib/jvm/jdk1.6.0_45/jre/bin/ControlPanel jre java /usr/lib/jvm/jdk1.6.0_45/jre/bin/java jre java_vm /usr/lib/jvm/jdk1.6.0_45/jre/bin/java_vm jre javaws /usr/lib/jvm/jdk1.6.0_45/jre/bin/javaws jre jcontrol /usr/lib/jvm/jdk1.6.0_45/jre/bin/jcontrol jre keytool /usr/lib/jvm/jdk1.6.0_45/jre/bin/keytool jre policytool /usr/lib/jvm/jdk1.6.0_45/jre/bin/policytool jre pack200 /usr/lib/jvm/jdk1.6.0_45/jre/bin/pack200 jre rmid /usr/lib/jvm/jdk1.6.0_45/jre/bin/rmid jre rmiregistry /usr/lib/jvm/jdk1.6.0_45/jre/bin/rmiregistry jre unpack200 /usr/lib/jvm/jdk1.6.0_45/jre/bin/unpack200 jre orbd /usr/lib/jvm/jdk1.6.0_45/jre/bin/orbd jre servertool /usr/lib/jvm/jdk1.6.0_45/jre/bin/servertool jre tnameserv /usr/lib/jvm/jdk1.6.0_45/jre/bin/tnameserv jre jexec /usr/lib/jvm/jdk1.6.0_45/jre/lib/jexec jdk appletviewer /usr/lib/jvm/jdk1.6.0_45/bin/appletviewer jdk apt /usr/lib/jvm/jdk1.6.0_45/bin/apt jdk extcheck /usr/lib/jvm/jdk1.6.0_45/bin/extcheck jdk idlj /usr/lib/jvm/jdk1.6.0_45/bin/idlj jdk jar /usr/lib/jvm/jdk1.6.0_45/bin/jar jdk jarsigner /usr/lib/jvm/jdk1.6.0_45/bin/jarsigner jdk javac /usr/lib/jvm/jdk1.6.0_45/bin/javac jdk javadoc /usr/lib/jvm/jdk1.6.0_45/bin/javadoc jdk javah /usr/lib/jvm/jdk1.6.0_45/bin/javah jdk javap /usr/lib/jvm/jdk1.6.0_45/bin/javap jdk jconsole /usr/lib/jvm/jdk1.6.0_45/bin/jconsole jdk jdb /usr/lib/jvm/jdk1.6.0_45/bin/jdb jdk jhat /usr/lib/jvm/jdk1.6.0_45/bin/jhat jdk jinfo /usr/lib/jvm/jdk1.6.0_45/bin/jinfo jdk jmap /usr/lib/jvm/jdk1.6.0_45/bin/jmap jdk jps /usr/lib/jvm/jdk1.6.0_45/bin/jps jdk jrunscript /usr/lib/jvm/jdk1.6.0_45/bin/jrunscript jdk jsadebugd /usr/lib/jvm/jdk1.6.0_45/bin/jsadebugd jdk jstack /usr/lib/jvm/jdk1.6.0_45/bin/jstack jdk jstat /usr/lib/jvm/jdk1.6.0_45/bin/jstat jdk jstatd /usr/lib/jvm/jdk1.6.0_45/bin/jstatd jdk native2ascii /usr/lib/jvm/jdk1.6.0_45/bin/native2ascii jdk rmic /usr/lib/jvm/jdk1.6.0_45/bin/rmic jdk schemagen /usr/lib/jvm/jdk1.6.0_45/bin/schemagen jdk serialver /usr/lib/jvm/jdk1.6.0_45/bin/serialver jdk wsgen /usr/lib/jvm/jdk1.6.0_45/bin/wsgen jdk wsimport /usr/lib/jvm/jdk1.6.0_45/bin/wsimport jdk xjc /usr/lib/jvm/jdk1.6.0_45/bin/xjc plugin xulrunner-1.9-javaplugin.so /usr/lib/jvm/jdk1.6.0_45/jre/lib/amd64/libnpjp2.so plugin firefox-javaplugin.so /usr/lib/jvm/jdk1.6.0_45/jre/lib/amd64/libnpjp2.so plugin iceape-javaplugin.so /usr/lib/jvm/jdk1.6.0_45/jre/lib/amd64/libnpjp2.so plugin iceweasel-javaplugin.so /usr/lib/jvm/jdk1.6.0_45/jre/lib/amd64/libnpjp2.so plugin mozilla-javaplugin.so /usr/lib/jvm/jdk1.6.0_45/jre/lib/amd64/libnpjp2.so plugin midbrowser-javaplugin.so /usr/lib/jvm/jdk1.6.0_45/jre/lib/amd64/libnpjp2.so plugin xulrunner-javaplugin.so /usr/lib/jvm/jdk1.6.0_45/jre/lib/amd64/libnpjp2.so
再建立 /usr/lib/jvm/debian-orcale-jdk6-alternatives.sh
這個檔案,內容如下:
#!/bin/bash # "Register JDK7 for update-alternatives Script in Debian Way" # Based on 1. codeslinger's "install_java7_alternatives" from https://gist.github.com/445930 # 2. oracle-java6-plugin.deb postint script (for plugin) # Modified by Cheng-Wei Chien<e.cwchien@gmail.com>, 2011-07-30 # ------------------------------------------------------------------------------ # Note: This script works on x86 Debian GNU/Linux. # If you use other arch or distro, you may have to modify some parameters. # # Usage: 1. Extract jdk7 tar.gz to, for example, /usr/lib/jvm/java-7-oracle-1.7.0, # create a symbolic link /usr/lib/jvm/java-7-oracle to it. # 2. Download java-7-oracle.jinfo from https://gist.github.com/1114515, # move it to /usr/lib/jvm/.java-7-oracle.jinfo, do some modification if necessary. # 3. Run this script with sudo # 4. sudo update-java-alternatives -s java-7-oracle # 5. Have fun with jdk7! # # Trouble Shooting: If something goes wrong, # 1. Uncomment "remove" commands and comment "install" commands. # 2. Run this script again to rollback. # 3. Fix what causes the problem, maybe typo or something else. # 4. Comment "remove" commands and uncomment "install" commands # 5. Run this script to update # Force the shell to exit immediately if something goes wrong set -e # Follow the Debian's priority rule for java5 = 53, java6 = 63 .. I guess priority=63 # Your jdk7 home, in this case, it's /usr/lib/jvm/java-7-oracle-1.7.0 # But I create a symbolic link /usr/lib/jvm/java-7-oracle to meet Debian's way basedir=/usr/lib/jvm/jdk1.6.0_45 # Your man1 dir, you don't need to change this mandir=$basedir/man/man1 # Variables from /usr/lib/jvm/.java-6-oracle.jinfo except HtmlConverter (not in jdk7) jdk_var='appletviewer apt extcheck idlj jar jarsigner javac javadoc javah javap jconsole jdb jhat jinfo jmap jps jrunscript jsadebugd jstack jstat jstatd native2ascii rmic schemagen serialver wsgen wsimport xjc' jre_var='ControlPanel java java_vm javaws jcontrol keytool pack200 rmid rmiregistry unpack200 orbd servertool tnameserv jexec policytool' # browser_var="xulrunner-addons firefox iceape iceweasel mozilla midbrowser xulrunner" browser_var="firefox iceweasel mozilla midbrowser" # Java plugin path, you don't need to change this plugin=$basedir/jre/lib/amd64/libnpjp2.so # First, gzip man1 files to meet the 1.gz form if [ -e $mandir ]; then for i in $mandir/*.1; do gzip $i done fi # Register jdk variables for i in $jdk_var; do unset slave || true if [ -e $mandir/$i.1.gz ]; then slave="--slave /usr/share/man/man1/$i.1.gz $i.1.gz $mandir/$i.1.gz" fi #update-alternatives --remove $i $basedir/bin/$i update-alternatives --install /usr/bin/$i $i $basedir/bin/$i $priority $slave done # Register jre variables for i in $jre_var; do unset slave || true if [ -e $mandir/$i.1.gz ]; then slave="--slave /usr/share/man/man1/$i.1.gz $i.1.gz $mandir/$i.1.gz" fi if [ $i = jexec ]; then # update-alternatives --remove jexec $basedir/jre/lib/jexec update-alternatives --install /usr/bin/jexec jexec $basedir/jre/lib/jexec $priority elif [ $i = java ]; then # update-alternatives --install /usr/bin/java java $basedir/jre/bin/java $priority $slave --slave /usr/bin/policytool policytool $basedir/jre/bin/policytool update-alternatives --install /usr/bin/java java $basedir/jre/bin/java $priority $slave else # update-alternatives --remove $i $basedir/jre/bin/$i update-alternatives --install /usr/bin/$i $i $basedir/jre/bin/$i $priority $slave fi done # Register plugins for i in $browser_var; do if [ $i = xulrunner-addons ]; then browser=xulrunner-1.9 else browser=$i fi mkdir -p /usr/lib/$i/plugins #update-alternatives --remove $browser-javaplugin.so $plugin update-alternatives --install /usr/lib/$i/plugins/libjavaplugin.so $browser-javaplugin.so $plugin $priority done
然後執行 /usr/lib/jvm/debian-orcale-jdk6-alternatives.sh 將 Oracle JDK 6 安裝到系統裡。
接著執行這個指令列出系統有那些 JDK:
$ sudo update-java-alternatives -l
此時應該能看到稍早安裝的 OpenJDK 7,和剛才安裝的 Oracle JDK 6 了。
java-1.7.0-openjdk-amd64 1051 /usr/lib/jvm/java-1.7.0-openjdk-amd64 jdk1.6.0_45 63 /usr/lib/jvm/jdk1.6.0_45
接著,再執行這個指令將預設的 JDK 改成 Oracle JDK 6 就可以了。
$ sudo update-java-alternatives -s jdk1.6.0_45
Step 6.
接著參考《使用 GitHub 管理 VIM》這篇文章及 https://github.com/yuanfarn/vimrc/blob/master/README.md 的說明,建立 ~/.vimrc 及 ~/.vim 的內容。摘錄指令如下:
$ git clone https://github.com/yuanfarn/vimrc.git ~/.vim $ cd ~/.vim $ git submodule init $ git submodule update $ cd ~ && ln -s ~/.vim/vimrc ~/.vimrc $ vim +BundleInstall
Step 7.
接著,我會執行以下指令設定 git 的幾項參數:
$ git config --global user.name "Shau-Hung Hsieh" $ git config --global user.email "shauhung -AT- gmail.com" $ git config --global color.diff auto $ git config --global color.status auto $ git config --global color.branch auto $ git config --global color.log auto
Step 8.
Debian 預設的 Samba 設定裡,每個使用者透過 Samba 對自己的家目錄是「唯讀」的,因此我通常會修改 Samba 的 /etc/samba/smb.conf,讓使用者可以透過 Samba 寫入自己的家目錄。修改前後差異如下:
--- /etc/samba/smb.conf 2013-09-10 05:59:58.410688535 +0000 +++ /etc/samba/smb.conf 2013-09-10 06:02:28.674702041 +0000 @@ -99,7 +99,7 @@ # in this server for every user accessing the server. See # /usr/share/doc/samba-doc/htmldocs/Samba3-HOWTO/ServerType.html # in the samba-doc package for details. -# security = user + security = user # You may wish to use password encryption. See the section on # 'encrypt passwords' in the smb.conf(5) manpage before enabling. @@ -247,11 +247,11 @@ # By default, the home directories are exported read-only. Change the # next parameter to 'no' if you want to be able to write to them. - read only = yes + read only = no # File creation mask is set to 0700 for security reasons. If you want to # create files with group=rw permissions, set next parameter to 0775. - create mask = 0700 + create mask = 0600 # Directory creation mask is set to 0700 for security reasons. If you want to # create dirs. with group=rw permissions, set next parameter to 0775.
基本上,改動的內容以家目錄 (HOME) 的分享為主:
# "security = user" is always a good idea. This will require a Unix account # in this server for every user accessing the server. See # /usr/share/doc/samba-doc/htmldocs/Samba3-HOWTO/ServerType.html # in the samba-doc package for details. security = user [homes] comment = Home Directories browseable = no # By default, the home directories are exported read-only. Change the # next parameter to 'no' if you want to be able to write to them. read only = no # File creation mask is set to 0700 for security reasons. If you want to # create files with group=rw permissions, set next parameter to 0775. create mask = 0600 # Directory creation mask is set to 0700 for security reasons. If you want to # create dirs. with group=rw permissions, set next parameter to 0775. directory mask = 0700 # By default, \\server\username shares can be connected to by anyone # with access to the samba server. # The following parameter makes sure that only "username" can connect # to \\server\username # This might need tweaking when using external authentication schemes valid users = %S
Step 9.
安裝到這裡,我已經擁有一個很好用的 Debian GNU/Linux 環境了。如同本文一開始所說的,我習慣以遠端登入的方式來操作,所以並沒有安裝 X 視窗 (X Window System)。不過,在我的腳本裡確實安裝了 X 視窗的基本套件 (xserver-xorg-core 與 xinit) 和幾個字型的套件。
如果需要在本機前面操作,且需要視窗介面時,目前 Debian GNU/Linux 已收錄了 Gnome 3,只要執行這個指令安裝基本的 Gnome 套件:
sudo apt-get install gnome-core
或是執行這個指令安裝更完整的 Gnome 桌面套件:
sudo apt-get install gnome
下圖就是安裝了 Gnome 的樣子:
如果只是偶爾需要在主機前使用少數圖形化的軟體,又不想安裝一整個的 Gnome 桌面,那麼還有一個更簡單的方式。在之前的腳本裡已經安裝了基本的 X 視窗套件 (xserver-xorg-core 與 xinit),因此只要再安裝像 FVWM 這類比較簡捷的視窗管理程式:
$ sudo apt-get install fvwm
然後,參考 https://wiki.debian.org/ 上的 Xorg 與 Xinitrc 兩個詞目的說明,執行 Xorg -configure
指令建立 Xorg 的設定檔 /etc/X11/xorg.conf,接著在使用者的家目錄裡建立 ~/.xinitrc 這個檔案,內容如下:
# ~/.xinitrc # This file is sourced when running startx and # other programs which call xinit # As in all Bash/sh scripts lines starting with # '#' are comments # Set background to your favorite pic xsetbg -fullscreen /morphix/background.png & # Start a XTerm /usr/bin/X11/xterm & # Start the systems window manager. # See WindowManagers for other choices. exec /etc/alternatives/x-window-manager # To run Gnome instead of system default, place a # '#' before the previous line and uncomment the # next line. # exec gnome-session
這麼一來,使用者可以在文字介面登入後,執行 startx
指令進入 X 視窗。就像下面這張圖一樣。
註:我實際在 KVM 及 VMware 下安裝 Debian GNU/Linux 與 FVWM,似乎可以不用理會 /etc/X11/xorg.conf 這個設定檔。
延伸閱讀:
- 在 Debian 上使用 ufw 設定防火牆
- 製作 Debian 的 USB 開機碟
- 升級至 Linux Mint 15 (Olivia)
- 在 Debian 使用 KVM / libvirt 的虛擬化系統
- 在 Linux Mint 14 安裝 Oracle JDK 6
- 在 OpenSUSE 12.2 安裝 Oracle JDK 6
- 如何安裝 Linux Mint 14
- 在 Debian GNU/Linux 安裝 Gnome
- 安裝 Debian GNU/Linux
- 在 Ubuntu 12.04 安裝 JDK 6 (最終版)
- 在 Ubuntu 12.04 安裝 JDK 6
- 讓 Ubuntu 12.04 的 ibus 倉頡五代輸入法預設使用繁體語系
- 在 OpenSUSE 12.1 安裝 Sun JDK 6
- Debian GNU/Linux 安裝記錄
- Ubuntu 10.10 安裝記錄
- Ubuntu 10.04 LTS 安裝記錄
- 在 Ubuntu 10.04 裡安裝 Sun JDK
- Ubuntu 9.10 安裝記錄
- Samba on Ubuntu 9.04
- Debian (testing) on VMware Workstation 6.0.5
- Debian 4.0 安裝記錄
- Ubuntu Linux 安裝筆記
沒有留言:
張貼留言