過去我在部落格上貼過一些 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 安裝筆記