docker save [ID or Name] > image.tar
docker load <image.tar
所有dockfile 設定保留
docker export [ID or Name] > image.tar
cat image.tar | docker import - some_image_name
所有dockfile 設定全去除
2016年12月30日 星期五
2016年12月15日 星期四
Bash筆記:Linux 一般帳號 mount cifs
限制
1.只能掛載至登入帳號擁有的目錄下
2.配合 sudo 使用
cifsmount.sh
E_STAT=/usr/bin/stat;
E_MOUNT=/bin/mount;
E_GREP=/bin/grep;
E_WHOAMI=/usr/bin/whoami;
# Check_Mount ='' do'nt check Mounted;
Check_Mount='1';
function help(){ echo Usage: $0 {service} {mount-point} [password];
echo exp:;echo $0 user@//server-name/share-name /home/user;echo $0 user@//server-ip/share-name /home/user password;
};
[ -z $2 ] && { help;exit 1;};
[ -d $2 ] && { Username=${1%@*};Share=${1##*@};}||{ echo "Couldn't chdir to $2: No such directory"; exit 2;};
[ -z "$Share" ] && { help;exit 5;};
[ -z "$Check_Mount" ] || [ -z "$($E_MOUNT|$E_GREP "$Share/ on $2 type cifs")" ]||{ echo "$Share had mounted on $2"; exit 4;};
[ "$SUDO_USER" == "" ] && Real_USER=$($E_WHOAMI)|| Real_USER=$SUDO_USER;
[ "$($E_STAT -c '%U' $2 2>/dev/null)" == "$Real_USER" ]||{ echo "Couldn't chdir to $2: not owner"; exit 3;};
[ -z $3 ] && { :;
_Cmd="$E_MOUNT -t cifs $Share $2 -o uid=$Real_USER,username=$Username";}||{ :;
_Cmd="$E_MOUNT -t cifs $Share $2 -o uid=$Real_USER,username=$Username,password=$3";};
$_Cmd;
cifsumount.sh
E_GREP=/bin/grep;
E_MOUNT=/bin/mount;
E_UMOUNT=/bin/umount;
E_STAT=/usr/bin/stat;
E_WHOAMI=/usr/bin/whoami;
function help(){ echo Usage:$0 {mount-point};echo exp:;echo $0 /home/user;};
[ -z $1 ] && { help;exit 1;};
[ -z "${_T:=$($E_MOUNT | $E_GREP " on $1 type cifs ")}" ] && { echo $1 not mount or not mount on cifs; exit 2;};
[ "$SUDO_USER" == "" ] && Real_USER=$($E_WHOAMI)|| Real_USER=$SUDO_USER;
[ "$($E_STAT -c '%U' $1 2>/dev/null)" == "$Real_USER" ]||{ echo "Couldn't umount $1: not owner"; exit 3;};
_cmd="$E_UMOUNT $1 $2";
$_cmd;
2016年12月14日 星期三
Bash 設定未定義變數值
a="123"
variable=$(( $a == 123 ? 1 : 0 ))
echo $variable
echo b=$b
: ${b:=$(whoami)}
echo b=$b
variable=$(( $a == 123 ? 1 : 0 ))
echo $variable
echo b=$b
: ${b:=$(whoami)}
echo b=$b
2016年11月25日 星期五
Linux 一般帳號掛載 cifs
root 權限 編輯 /etc/fstab 加入
//server/share /mnt cifs noauto,user 0 0
一般帳號
export USER=user
mount /mnt
Password:
//server/share /mnt cifs noauto,user 0 0
一般帳號
export USER=user
mount /mnt
Password:
2016年11月22日 星期二
GOLANG function 回傳不特定類型值
func a(x int) interface{}{
if x==1 { return nil }
if x==2 { return 2 }
return "string"
}
if x==1 { return nil }
if x==2 { return 2 }
return "string"
}
2016年11月17日 星期四
2016年11月1日 星期二
自訂 docker image
1.tar --numeric-owner --exclude=/root --exclude=/proc --exclude=/sys -cvf centos6-base.tar /
2.cat centos6-base.tar | docker import - centos6-base
3.docker run -i -t centos6-base cat /etc/redhat-release
2.cat centos6-base.tar | docker import - centos6-base
3.docker run -i -t centos6-base cat /etc/redhat-release
2016年10月11日 星期二
kmod 使用摘要
可取代 modprobe, insmod,rmmod,lsmod
kmod static-nodes --format=tmpfiles --output=/run/tmpfiles.d/kmod.conf
kmod static-nodes --format=tmpfiles --output=/run/tmpfiles.d/kmod.conf
列出所有網路遮罩長度 IP
package main
import (
"fmt"
"math"
"net"
"encoding/binary"
)
func main() {
var ii uint32 = 0
for i:=1; i<33; i++ {
ii += uint32(math.Pow(2, float64(32-i)));
fmt.Print(i, " ", long2ip(ii), " ", ii, "\n")
}
}
func ip2long(ipstr string) uint32 {
ip := net.ParseIP(ipstr)
if ip == nil { return 0 }
return binary.BigEndian.Uint32(ip.To4())
}
func long2ip(ipLong uint32) string {
ipByte := make([]byte, 4)
binary.BigEndian.PutUint32(ipByte, ipLong)
return net.IP(ipByte).String()
}
import (
"fmt"
"math"
"net"
"encoding/binary"
)
func main() {
var ii uint32 = 0
for i:=1; i<33; i++ {
ii += uint32(math.Pow(2, float64(32-i)));
fmt.Print(i, " ", long2ip(ii), " ", ii, "\n")
}
}
func ip2long(ipstr string) uint32 {
ip := net.ParseIP(ipstr)
if ip == nil { return 0 }
return binary.BigEndian.Uint32(ip.To4())
}
func long2ip(ipLong uint32) string {
ipByte := make([]byte, 4)
binary.BigEndian.PutUint32(ipByte, ipLong)
return net.IP(ipByte).String()
}
列出所有網路遮罩長度 IP
$ip = 0;
for ($i=1; $i<33; $i++)
printf("%d %s %s\n\n", $i, $ip+= pow(2, 32-$i), long2ip($ip));
2016年9月30日 星期五
GO Web cgi server
package main
import(
"net/http/cgi"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request){
handler := new(cgi.Handler)
handler.Path = "/root/goweb/" + r.URL.Path
// handler.Dir = "/root/goweb/"
log.Println(handler.Path)
log.Println(handler.Args)
handler.ServeHTTP(w, r)
})
log.Fatal(http.ListenAndServe(":8080",nil))
}
import(
"net/http/cgi"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request){
handler := new(cgi.Handler)
handler.Path = "/root/goweb/" + r.URL.Path
// handler.Dir = "/root/goweb/"
log.Println(handler.Path)
log.Println(handler.Args)
handler.ServeHTTP(w, r)
})
log.Fatal(http.ListenAndServe(":8080",nil))
}
GO Web cgi server (直接執行 go )
package main
import(
"net/http/cgi"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request){
handler := new(cgi.Handler)
handler.Path = "/usr/local/bin/go"
script := "/root/goweb/" + r.URL.Path
log.Println(handler.Path)
handler.Dir = "/root/goweb/"
args := []string{"run", script}
handler.Args = append(handler.Args, args...)
handler.Env = append(handler.Env, "GOPATH=/root/goweb")
handler.Env = append(handler.Env, "GOROOT=/usr/local/go")
log.Println(handler.Args)
handler.ServeHTTP(w, r)
})
log.Fatal(http.ListenAndServe(":8080",nil))
}
import(
"net/http/cgi"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request){
handler := new(cgi.Handler)
handler.Path = "/usr/local/bin/go"
script := "/root/goweb/" + r.URL.Path
log.Println(handler.Path)
handler.Dir = "/root/goweb/"
args := []string{"run", script}
handler.Args = append(handler.Args, args...)
handler.Env = append(handler.Env, "GOPATH=/root/goweb")
handler.Env = append(handler.Env, "GOROOT=/usr/local/go")
log.Println(handler.Args)
handler.ServeHTTP(w, r)
})
log.Fatal(http.ListenAndServe(":8080",nil))
}
GOLANG CGI範例
package main
import (
"net/http/cgi"
"net/http"
"fmt"
)
func errorResponse(code int, msg string) {
fmt.Printf("Status:%d %s\r\n", code, msg)
fmt.Printf("Content-Type: text/plain\r\n")
fmt.Printf("\r\n")
fmt.Printf("%s\r\n", msg)
}
func main() {
var req *http.Request
var err error
req, err = cgi.Request()
if err != nil {
errorResponse(500, "cannot get cgi request" + err.Error())
return
}
fmt.Printf("Content-Type: text/html\r\n")
fmt.Printf("\r\n")
fmt.Printf("<pre>\n")
import (
"net/http/cgi"
"net/http"
"fmt"
)
func errorResponse(code int, msg string) {
fmt.Printf("Status:%d %s\r\n", code, msg)
fmt.Printf("Content-Type: text/plain\r\n")
fmt.Printf("\r\n")
fmt.Printf("%s\r\n", msg)
}
func main() {
var req *http.Request
var err error
req, err = cgi.Request()
if err != nil {
errorResponse(500, "cannot get cgi request" + err.Error())
return
}
fmt.Printf("Content-Type: text/html\r\n")
fmt.Printf("\r\n")
fmt.Printf("<pre>\n")
fmt.Printf("req=%v\r\n", req) }
2016年9月29日 星期四
2016年9月20日 星期二
GIT :error: src refspec master does not match any
錯誤的原因:目錄中沒有文件,空目錄是不能提交上去
新增文件就可以
touch README
git add README
git commit -m 'first commit'
git push origin master
新增文件就可以
touch README
git add README
git commit -m 'first commit'
git push origin master
2016年9月19日 星期一
GOLANG MySQL 查詢範例
安裝 mySQL 介面
go get github.com/go-sql-driver/mysql
程式範例
package main
import (
_ "github.com/go-sql-driver/mysql"
"database/sql"
"fmt"
)
func main() {
db, err := sql.Open("mysql", "user:password@tcp(192.168.1.1:3306)/dbname?charset=utf8&allowOldPasswords=1")
checkErr(err)
rows, err := db.Query("SELECT `load` FROM a limit 10")
checkErr(err)
for rows.Next() {
var load int
err = rows.Scan(&load)
checkErr(err)
fmt.Println(load)
}
db.Close()
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
go get github.com/go-sql-driver/mysql
程式範例
package main
import (
_ "github.com/go-sql-driver/mysql"
"database/sql"
"fmt"
)
func main() {
db, err := sql.Open("mysql", "user:password@tcp(192.168.1.1:3306)/dbname?charset=utf8&allowOldPasswords=1")
checkErr(err)
rows, err := db.Query("SELECT `load` FROM a limit 10")
checkErr(err)
for rows.Next() {
var load int
err = rows.Scan(&load)
checkErr(err)
fmt.Println(load)
}
db.Close()
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
2016年9月2日 星期五
CentOS6 Xwindow 支援中文設定
yum -y groupinstall "chinese support"
修改 /etc/sysconfig/i18n
LANG="en_US.UTF-8" --> LANG="zh_TW.UTF-8"
gcin 輸入法
http://mirrors.sohu.com/fedora-epel/6/x86_64/gcin-1.5.1-1.el6.x86_64.rpm
修改 /etc/sysconfig/i18n
LANG="en_US.UTF-8" --> LANG="zh_TW.UTF-8"
gcin 輸入法
http://mirrors.sohu.com/fedora-epel/6/x86_64/gcin-1.5.1-1.el6.x86_64.rpm
VPS + CentOS6 + XWindow + XRDP
yum -y upgrade
yum -y install xorg-x11-fonts-Type1 xorg-x11-fonts-truetype
yum -y groupinstall "X Window System" "Desktop"
rpm -Uvh http://fedora.ip-connect.vn.ua/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
yum -y install xrdp
yum -y install firefox tigervnc tigervnc-server tigervnc-server-module
chkconfig haldaemon --levels 2345 off
chkconfig xrdp --levels 345 on
service xrdp start
echo "gnome-wm" > /root/.vnc/xstartup
yum -y install xorg-x11-fonts-Type1 xorg-x11-fonts-truetype
yum -y groupinstall "X Window System" "Desktop"
rpm -Uvh http://fedora.ip-connect.vn.ua/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
yum -y install xrdp
yum -y install firefox tigervnc tigervnc-server tigervnc-server-module
chkconfig haldaemon --levels 2345 off
chkconfig xrdp --levels 345 on
service xrdp start
echo "gnome-wm" > /root/.vnc/xstartup
2016年8月17日 星期三
LEAF 安裝 HAVP (搭配 ClamAV)
安裝設定 ClamAV
安裝 havp
apkg -i havp libcxx hdsupp mtools libiconv libuuid libsmartcols
建立 havp 工作區 havp.img
mkdir /share
dd if=/dev/zero of=/share/havp.img bs=10240 count=512
mkfs.ext3 -F -q -m0 /share/havp.img
掛載 havp.img
losetup /dev/loop0 /share/havp.img
mkdir /share/havp
mount -o mand /dev/loop0 /share/havp
執行
/etc/init.d/havp.sh start
下載病毒碼測試
http://www.eicar.org/85-0-Download.html
安裝 havp
apkg -i havp libcxx hdsupp mtools libiconv libuuid libsmartcols
建立 havp 工作區 havp.img
mkdir /share
dd if=/dev/zero of=/share/havp.img bs=10240 count=512
mkfs.ext3 -F -q -m0 /share/havp.img
掛載 havp.img
losetup /dev/loop0 /share/havp.img
mkdir /share/havp
mount -o mand /dev/loop0 /share/havp
執行
/etc/init.d/havp.sh start
下載病毒碼測試
http://www.eicar.org/85-0-Download.html
LEAF 安裝 ClamAV
安裝 ClamAV
apkg -i clamav libz libssl libcrypto
修改 /etc/clamav/freshclam.conf
#Example
DatabaseDirectory /tmp
修改 /etc/clamav/clamav.conf
#Example
DatabaseDirectory /tmp
LocalSocket /tmp/clamd.socket
Logfile /tmp/clamd.log
LogVerbose yes
下載病毒碼
freshclam -v
執行
/etc/init.d/clamd start
apkg -i clamav libz libssl libcrypto
修改 /etc/clamav/freshclam.conf
#Example
DatabaseDirectory /tmp
修改 /etc/clamav/clamav.conf
#Example
DatabaseDirectory /tmp
LocalSocket /tmp/clamd.socket
Logfile /tmp/clamd.log
LogVerbose yes
下載病毒碼
freshclam -v
執行
/etc/init.d/clamd start
2016年8月10日 星期三
Linux CentOS6 Console 使用中文摘要
安裝 epel-release fbterm fontconfig-devel freetype-devel
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release*rpm
yum install fbterm
yum fontconfig-devel
yum freetype-devel
下載中文字型
ftp://ftp.kh.edu.tw/pub/Linux/CLE/fonts/ttf/
安裝中文字型
cp font.ttf /usr/share/fonts/
fc-cache -fv
fc-list
編輯 Grub 開機設定
加入 'vga=ask'
reboot
執行
fbterm
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release*rpm
yum install fbterm
yum fontconfig-devel
yum freetype-devel
下載中文字型
ftp://ftp.kh.edu.tw/pub/Linux/CLE/fonts/ttf/
安裝中文字型
cp font.ttf /usr/share/fonts/
fc-cache -fv
fc-list
編輯 Grub 開機設定
加入 'vga=ask'
reboot
執行
fbterm
2016年7月26日 星期二
MySQL 取得 trigger 作用的 table
SELECT EVENT_OBJECT_TABLE
INTO @table_name
FROM INFORMATION_SCHEMA.TRIGGERS
WHERE TRIGGER_NAME = 'trigger_name';
MySQL 動態 SQL 範例
SET @tab = 'a';
SET @s = CONCAT('select * from ', @tab, ' where ID = 1');
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
SET @s = CONCAT('select * from ', @tab, ' where ID = 1');
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
2016年7月22日 星期五
bash lock file
echo "
exec 3<>\$0
while true; do sleep 1; done " >lock.sh
chmod a+x lock.sh
執行方式
lock.sh 不能透過 bash lock.sh
應用
同時只能執行一次的 script
exec 3<>\$0
while true; do sleep 1; done " >lock.sh
chmod a+x lock.sh
執行方式
lock.sh 不能透過 bash lock.sh
應用
同時只能執行一次的 script
2016年7月20日 星期三
bash ip int 轉換
function itoa { :;
echo -n $(($(($(($((${1}/256))/256))/256))%256)).;
echo -n $(($(($((${1}/256))/256))%256)).;
echo -n $(($((${1}/256))%256)).;
echo $((${1}%256));
};
itoa 3232235777
function atoi { :;
IPNUM=0;j=3;OIFS=$IFS;IFS='.';
for i in $1; do :;IPNUM=$(($IPNUM + $i*256**$j));j=$(($j-1));[ $j -lt 0 ] && break;done;
IFS=$OIFS;
echo $IPNUM;
};
atoi 192.168.1.1
echo -n $(($(($(($((${1}/256))/256))/256))%256)).;
echo -n $(($(($((${1}/256))/256))%256)).;
echo -n $(($((${1}/256))%256)).;
echo $((${1}%256));
};
itoa 3232235777
function atoi { :;
IPNUM=0;j=3;OIFS=$IFS;IFS='.';
for i in $1; do :;IPNUM=$(($IPNUM + $i*256**$j));j=$(($j-1));[ $j -lt 0 ] && break;done;
IFS=$OIFS;
echo $IPNUM;
};
atoi 192.168.1.1
2016年7月11日 星期一
bash whiptail範例
#!/bin/bash
DIALOG=/usr/bin/whiptail;
exec 3>&1;
a=$($DIALOG --inputbox "input yes or no" 10 40 2>&1 1>&3)
$DIALOG --msgbox $a 10 40
exec 3>&-
DIALOG=/usr/bin/whiptail;
exec 3>&1;
a=$($DIALOG --inputbox "input yes or no" 10 40 2>&1 1>&3)
$DIALOG --msgbox $a 10 40
exec 3>&-
2016年7月5日 星期二
bash tcp 傳輸檔案
接收資料
nc -l -p 2100 |gzip -d|cpio -i
發送資料
exec 3<>/dev/tcp/[dest host ip]/2100
find . |cpio -o |gzip >&3
exec 3<&-
exec 3>&-
GNU bash, version 3.2.25(1)-release
nc -l -p 2100 |gzip -d|cpio -i
發送資料
exec 3<>/dev/tcp/[dest host ip]/2100
find . |cpio -o |gzip >&3
exec 3<&-
exec 3>&-
GNU bash, version 3.2.25(1)-release
2016年7月2日 星期六
2016年7月1日 星期五
bash #檢查linux 核心是否大於等於 2.6.32 (devtmpfs 收錄版本)
#檢查是否大於等於 2.6.32 (devtmpfs 收錄版本)
:;function fun_is_kernel2.6.32 { :;
[ "$1" = "" ] && return 1;
local k=${1%-*};OIFS=$IFS;IFS='.';k=($k);IFS=$OIFS;
[ "${k[0]}" -gt 2 ] && return 0;[ "${k[0]}" -lt 2 ] && return 1;
[ "${k[1]}" = '' ] && return 1;[ "${k[1]}" -lt 6 ] && return 1;[ "${k[1]}" -gt 6 ] && return 0;
[ "${k[2]}" = '' ] && return 1;[ "${k[2]}" -lt 32 ] && return 1;
return 0;
};
:;function fun_is_kernel2.6.32 { :;
[ "$1" = "" ] && return 1;
local k=${1%-*};OIFS=$IFS;IFS='.';k=($k);IFS=$OIFS;
[ "${k[0]}" -gt 2 ] && return 0;[ "${k[0]}" -lt 2 ] && return 1;
[ "${k[1]}" = '' ] && return 1;[ "${k[1]}" -lt 6 ] && return 1;[ "${k[1]}" -gt 6 ] && return 0;
[ "${k[2]}" = '' ] && return 1;[ "${k[2]}" -lt 32 ] && return 1;
return 0;
};
2016年6月30日 星期四
dracut debug 相關參數
dracut boot parameters
The following boot parameters are also available to further assist with debugging boot issues.
rd.shell
Drop to a shell, if the initramfs fails.
rd.debug
set -x for the dracut shell.
rd.break=[cmdline|pre-udev|pre-trigger|initqueue|pre-mount|mount|pre-pivot|cleanup]
drop the shell on defined breakpoint (use egrep 'rd.?break' /usr/lib/dracut/modules.d/99base/init.sh to find the breakpoints supported by your dracut version)
rdudevinfo
set udev to loglevel info
rdudevdebug
set udev to loglevel debug
rdnetdebug
debug network scripts in dracut. Output is written to /tmp
The following boot parameters are also available to further assist with debugging boot issues.
rd.shell
Drop to a shell, if the initramfs fails.
rd.debug
set -x for the dracut shell.
rd.break=[cmdline|pre-udev|pre-trigger|initqueue|pre-mount|mount|pre-pivot|cleanup]
drop the shell on defined breakpoint (use egrep 'rd.?break' /usr/lib/dracut/modules.d/99base/init.sh to find the breakpoints supported by your dracut version)
rdudevinfo
set udev to loglevel info
rdudevdebug
set udev to loglevel debug
rdnetdebug
debug network scripts in dracut. Output is written to /tmp
mknod /dev/mem /dev/kmem
mknod /dev/mem c 1 1
chown root.mem /dev/mem
mknod /dev/kmem c 1 2
chown root.kmem /dev/kmem
udev 使用的文件
/sys/*
/dev/*
/etc/udev/udev.conf udev主要設定檔
/etc/udev/rules.d/* udev 事件規則
/usr/lib/tmpfiles.d/ /etc/tmpfiles.d/ static dev 規則
/usr/lib/udev/* udev 規則
/dev/*
/etc/udev/udev.conf udev主要設定檔
/etc/udev/rules.d/* udev 事件規則
/usr/lib/tmpfiles.d/ /etc/tmpfiles.d/ static dev 規則
/usr/lib/udev/* udev 規則
2016年6月28日 星期二
Linux RAM Disk modules
The RAM Disk is created when the "brd" module is loaded (brd=block ram disk)
modprobe brd
rd_nr:Maximum number of brd devices (int)
rd_size:Size of each RAM disk in kbytes. (int)
max_part:Maximum number of partitions per RAM disk (int)
example
modprobe brd rd_size=1024000 max_part=2 rd_nr=1
核心支援版本
2.0.40, 2.2.26, 2.4.37, 2.6.18, 2.6.24
核心 modules 支援版本
2.6.25,2.6.28, 2.6.30.1, 2.6.39 ,3.9 ,3.10, 3.11 ,3.12 ,3.13, 3.14, 3.15 ,3.16, 3.17, 3.18 ,3.19, 4.0 ,4.1, 4.2 ,4.3 4.4
modprobe brd
rd_nr:Maximum number of brd devices (int)
rd_size:Size of each RAM disk in kbytes. (int)
max_part:Maximum number of partitions per RAM disk (int)
example
modprobe brd rd_size=1024000 max_part=2 rd_nr=1
核心支援版本
2.0.40, 2.2.26, 2.4.37, 2.6.18, 2.6.24
核心 modules 支援版本
2.6.25,2.6.28, 2.6.30.1, 2.6.39 ,3.9 ,3.10, 3.11 ,3.12 ,3.13, 3.14, 3.15 ,3.16, 3.17, 3.18 ,3.19, 4.0 ,4.1, 4.2 ,4.3 4.4
2016年6月20日 星期一
Bash 列出所有 Char Device
# Char Device
for i in /sys/bus/*/devices/*/dev /sys/class/*/*/dev;
do :;
if [ -f "$i" ] ;then :;
OIFS=IFS;
IFS=:;
t=($(cat "$i"));
IFS=$OIFS;
i=${i%/dev};
i=${i##*/};
echo name=$i major=${t[0]} minor=${t[1]};
fi;
done;
for i in /sys/bus/*/devices/*/dev /sys/class/*/*/dev;
do :;
if [ -f "$i" ] ;then :;
OIFS=IFS;
IFS=:;
t=($(cat "$i"));
IFS=$OIFS;
i=${i%/dev};
i=${i##*/};
echo name=$i major=${t[0]} minor=${t[1]};
fi;
done;
Bash 列出所有 Block Device
#!/bin/sh
# Block Device
for i in /sys/block/*/dev /sys/block/*/*/dev ;
do :;
if [ -f $i ]; then :;
OIFS=IFS;
IFS=:;
t=($(cat $i));
IFS=$OIFS;
i=${i%/dev};
i=${i##*/};
echo name=$i major=${t[0]} minor=${t[1]};
fi;
done;
# Block Device
for i in /sys/block/*/dev /sys/block/*/*/dev ;
do :;
if [ -f $i ]; then :;
OIFS=IFS;
IFS=:;
t=($(cat $i));
IFS=$OIFS;
i=${i%/dev};
i=${i##*/};
echo name=$i major=${t[0]} minor=${t[1]};
fi;
done;
2016年6月16日 星期四
BASH script :dirname & basename
function fun_basename { :; echo ${1##*/}; };
function fun_dirname { :; _t=${1%*/*}; [ $1 = $_t ] && echo "." || echo $_t; }
function fun_dirname { :; _t=${1%*/*}; [ $1 = $_t ] && echo "." || echo $_t; }
2016年6月14日 星期二
Keepalived 設定筆記
Global definitions synopsis
global_defs{
notification_email{
email
email
}
notification_email_from
email smtp_server host
smtp_connect_timeout num
lvs_id
}
Keyword:Definition Type
VRRP Instance definitions synopsis
vrrp_sync_group string {
group{
string
string
}
notify_master /path_to_script/script_master.sh
(or notify_master “/path_to_script/script_master.sh”)
notify_backup /path_to_script/script_backup.sh
(or notify_backup “/path_to_script/script_backup.sh”)
notify_fault /path_to_script/script_fault.sh
(or notify_fault “/path_to_script/script_fault.sh”)
}
vrrp_instance string {
state MASTER|BACKUP
interface string
mcast_src_ip @IP
lvs_sync_daemon_interface string
virtual_router_id num
priority num
advert_int num
smtp_alert
authentication {
auth_type PASS|AH
auth_pass string
}
virtual_ipaddress { # Block limited to 20 IP addresses
@IP
@IP
@IP
}
virtual_ipaddress_excluded { # Unlimited IP addresses number
@IP
@IP
@IP
}
notify_master /path_to_script/script_master.sh
(or notify_master “/path_to_script/script_master.sh”)
notify_backup /path_to_script/script_backup.sh
(or notify_backup “/path_to_script/script_backup.sh”)
notify_fault /path_to_script/script_fault.sh
(or notify_fault “/path_to_script/script_fault.sh”)
}
Keyword:Definition Type
Master 設定
global_defs {
notification_email {
user@example.com
}
notification_email_from mail@example.org
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER #狀態為 MASTER
interface eth1
virtual_router_id 51
priority 101 #MASTER 權重高於 BACKUP
advert_int 1
mcast_src_ip 192.168.10.101 #vrrp IP
authentication {
auth_type PASS #認證方式
auth_pass 1111
}
#VIP
virtual_ipaddress {
192.168.10.100 #virtual IP
}
}
Backup 設定
global_defs {
notification_email {
user@example.com
}
notification_email_from mail@example.org
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP #狀態為 BACKUP
interface eth1
virtual_router_id 51
priority 100 #權重低於 MASTER
advert_int 1
mcast_src_ip 192.168.10.102 #vrrp IP
authentication {
auth_type PASS
auth_pass 1111
}
#VIP
virtual_ipaddress {
192.168.10.100 #virtual IP
}
}
global_defs{
notification_email{
}
notification_email_from
email smtp_server host
smtp_connect_timeout num
lvs_id
}
Keyword:Definition Type
- global_defs: identify the global def configuration block
- notification_email: email accounts that will receive the notification mail List
- notification_email_from: email to use when processing “MAIL FROM:” SMTP command List
- smtp_server: remote SMTP server to use for sending mail notifications alphanum
- smtp_connection_timeout: specify a timeout for SMTP stream processing numerical
- lvs_id: specify the name of the LVS director alphanum
VRRP Instance definitions synopsis
vrrp_sync_group string {
group{
string
string
}
notify_master /path_to_script/script_master.sh
(or notify_master “/path_to_script/script_master.sh
notify_backup /path_to_script/script_backup.sh
(or notify_backup “/path_to_script/script_backup.sh
notify_fault /path_to_script/script_fault.sh
(or notify_fault “/path_to_script/script_fault.sh
}
vrrp_instance string {
state MASTER|BACKUP
interface string
mcast_src_ip @IP
lvs_sync_daemon_interface string
virtual_router_id num
priority num
advert_int num
smtp_alert
authentication {
auth_type PASS|AH
auth_pass string
}
virtual_ipaddress { # Block limited to 20 IP addresses
@IP
@IP
@IP
}
virtual_ipaddress_excluded { # Unlimited IP addresses number
@IP
@IP
@IP
}
notify_master /path_to_script/script_master.sh
(or notify_master “/path_to_script/script_master.sh
notify_backup /path_to_script/script_backup.sh
(or notify_backup “/path_to_script/script_backup.sh
notify_fault /path_to_script/script_fault.sh
(or notify_fault “/path_to_script/script_fault.sh
}
Keyword:Definition Type
vrrp_instance :identify a VRRP instance definition block State :specify the instance state in standard use Interface :specify the network interface for the instance to run on string mcast_src_ip :specify the src IP address value for VRRP adverts IP header lvs_sync_daemon_inteface :specify the network interface for the LVS sync_daemon to run on string Virtual_router_id :specify to which VRRP router id the instance belongs numerical Priority :specify the instance priority in the VRRP router numerical advert_int :specify the advertisement interval in seconds (set to 1) numerical smtp_alert :Activate the SMTP notification for MASTER state transition authentication :identify a VRRP authentication definition block auth_type :specify which kind of authentication to use (PASS|AH) auth_pass :specify the password string to use string virtual_ipaddress :identify a VRRP VIP definition block virtual_ipaddress_excluded :identify a VRRP VIP excluded definition block (not protocol VIPs) notify_master :specify a shell script to be executed during transition to master state path notify_backup :specify a shell script to be executed during transition to backup state path notify_fault :specify a shell script to be executed during transition to fault state path vrrp_sync_group :Identify the VRRP synchronization instances group string
Master 設定
global_defs {
notification_email {
user@example.com
}
notification_email_from mail@example.org
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER #狀態為 MASTER
interface eth1
virtual_router_id 51
priority 101 #MASTER 權重高於 BACKUP
advert_int 1
mcast_src_ip 192.168.10.101 #vrrp IP
authentication {
auth_type PASS #認證方式
auth_pass 1111
}
#VIP
virtual_ipaddress {
192.168.10.100 #virtual IP
}
}
Backup 設定
global_defs {
notification_email {
user@example.com
}
notification_email_from mail@example.org
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP #狀態為 BACKUP
interface eth1
virtual_router_id 51
priority 100 #權重低於 MASTER
advert_int 1
mcast_src_ip 192.168.10.102 #vrrp IP
authentication {
auth_type PASS
auth_pass 1111
}
#VIP
virtual_ipaddress {
192.168.10.100 #virtual IP
}
}
2016年6月6日 星期一
MySQL Table 匯出csv
SELECT *
INTO OUTFILE '/tmp/data.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
FROM table
INTO OUTFILE '/tmp/data.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
FROM table
2016年6月4日 星期六
常用Joomla 模組
下拉式選單模組
ARI YUI Menu
Maximenu CK
圖片/影片輪播模組
Slideshow CK
文章中增加附加檔案
Attachments for Joomla!
http://jmcameron.net/attachments/
限制副檔名,不能上傳的副檔名設定 修改 內容->媒體->選項->合法的副檔名
JCE
https://www.joomlacontenteditor.net/
PHP CSS HTML 等原始碼
Sourcerer
https://www.regularlabs.com/extensions/sourcerer#tutorial
Email 通知文章異動
Content Update Notifications
http://extensions.joomla.org/extension/content-update-notifications
NotificationAry
http://gruz.org.ua/en/extensions/notificationary.html
最新消息
News Show Pro GK5
https://www.gavick.com/news-show-pro
Mini Frontpage
https://www.templateplazza.com/items/mini-frontpage-joomla-module
Latest News+ Date
http://extensions.joomla.org/extension/latest-news-date
ARI YUI Menu
Maximenu CK
圖片/影片輪播模組
Slideshow CK
文章中增加附加檔案
Attachments for Joomla!
http://jmcameron.net/attachments/
限制副檔名,不能上傳的副檔名設定 修改 內容->媒體->選項->合法的副檔名
JCE
https://www.joomlacontenteditor.net/
PHP CSS HTML 等原始碼
Sourcerer
https://www.regularlabs.com/extensions/sourcerer#tutorial
Email 通知文章異動
Content Update Notifications
http://extensions.joomla.org/extension/content-update-notifications
NotificationAry
http://gruz.org.ua/en/extensions/notificationary.html
最新消息
News Show Pro GK5
https://www.gavick.com/news-show-pro
Mini Frontpage
https://www.templateplazza.com/items/mini-frontpage-joomla-module
Latest News+ Date
http://extensions.joomla.org/extension/latest-news-date
2016年6月2日 星期四
LXC 常用指令
lxc-ls 列出所有容器
lxc-top 監視已啟動容器狀態
lxc-info 顯示狀態
lxc-start 開啟容器
lxc-stop 關閉容器
lxc-console (離開 Ctrl-A Q)
lxc-monitor 監視容器狀態
lxc-execute 執行容器內指令
exp:lxc-execute -n 113 /bin/ls
lxc-checkconfig 檢查 kernel 是否支援 LXC
lxc-top 監視已啟動容器狀態
lxc-info 顯示狀態
lxc-start 開啟容器
lxc-stop 關閉容器
lxc-console (離開 Ctrl-A Q)
lxc-monitor 監視容器狀態
lxc-execute 執行容器內指令
exp:lxc-execute -n 113 /bin/ls
lxc-checkconfig 檢查 kernel 是否支援 LXC
2016年5月20日 星期五
Bering-uClibc LEAF 5.x shorewall ulogd + MySQL 設定摘要
Bering-uClibc LEAF 5.x ulogd 改為 ulogd2,kernel 不支援 ulog 改為 nflog
安裝 ulogd-mysql 套件
ulogd-mysql
SHOREWALL 相關設定
/etc/shorewall/policy
#設定要 log 條件,NFLOG(4) 指定 nflog-group 4
vpn net ACCEPT NFLOG(4)
/etc/shorewall/rules
#設定要 log 條件,NFLOG(4) 指定 nflog-group 4
SSH(ACCEPT):NFLOG(4) loc fw
ULOGD2相關設定
修改 /etc/ulogd.conf 相關設定
plugin="/usr/lib/ulogd/ulogd_output_MYSQL.so"
stack=log4:NFLOG,base1:BASE,ifi1:IFINDEX,ip2bin1:IP2BIN,mac2str1:HWHDR,mysql1:MYSQL
[mysql1]
db="ulog2"
host="192.168.1.1"
user="ulog"
table="ulog" #表格名稱不能異動 ulog 為 view
pass="ulog"
procedure="INSERT_PACKET_FULL"
[log4]
group=4
numeric_label=4
查詢 ULOGD2 版本
ulogd -V
MySQL Server相關設定
1.建立相關資料庫及帳號
2.下載 ULOGD2 MySQL SQL,設定資料庫 http://www.netfilter.org/projects/ulogd/
/ulogd-2.????/doc/ mysql-ulogd2.sql
https://github.com/inliniac/ulogd2/blob/master/doc/mysql-ulogd2.sql
安裝 ulogd-mysql 套件
ulogd-mysql
SHOREWALL 相關設定
/etc/shorewall/policy
#設定要 log 條件,NFLOG(4) 指定 nflog-group 4
vpn net ACCEPT NFLOG(4)
/etc/shorewall/rules
#設定要 log 條件,NFLOG(4) 指定 nflog-group 4
SSH(ACCEPT):NFLOG(4) loc fw
ULOGD2相關設定
修改 /etc/ulogd.conf 相關設定
plugin="/usr/lib/ulogd/ulogd_output_MYSQL.so"
stack=log4:NFLOG,base1:BASE,ifi1:IFINDEX,ip2bin1:IP2BIN,mac2str1:HWHDR,mysql1:MYSQL
[mysql1]
db="ulog2"
host="192.168.1.1"
user="ulog"
table="ulog" #表格名稱不能異動 ulog 為 view
pass="ulog"
procedure="INSERT_PACKET_FULL"
[log4]
group=4
numeric_label=4
查詢 ULOGD2 版本
ulogd -V
MySQL Server相關設定
1.建立相關資料庫及帳號
2.下載 ULOGD2 MySQL SQL,設定資料庫 http://www.netfilter.org/projects/ulogd/
/ulogd-2.????/doc/ mysql-ulogd2.sql
https://github.com/inliniac/ulogd2/blob/master/doc/mysql-ulogd2.sql
2016年5月12日 星期四
2016年5月6日 星期五
Linux Dracut 使用摘要
列出系統中 dracult 有那些 module
dracut --list-modules
initramfs 不使用 early microcode
dracut --no-early-microcode
initramfs 增加 driver module
dracult --a "cifs nfs"
initramfs 增加 driver module
dracult --add-drivers "brd cifs arc4 md4 brd nfs nfsv4 nfs_acl ext4 btrfs"
initramfs 增加檔案
dracut --install "/bin/foo /sbin/bar" ...
列出 initramfs 有那些 modules
lsinitrd -m /boot/initramfs-3.10.0-229.el7.x86_64.img
Dracult 版本
/usr/lib/dracult/dracut-version.sh
dracut --list-modules
initramfs 不使用 early microcode
dracut --no-early-microcode
initramfs 增加 driver module
dracult --a "cifs nfs"
initramfs 增加 driver module
dracult --add-drivers "brd cifs arc4 md4 brd nfs nfsv4 nfs_acl ext4 btrfs"
initramfs 增加檔案
dracut --install "/bin/foo /sbin/bar" ...
列出 initramfs 有那些 modules
lsinitrd -m /boot/initramfs-3.10.0-229.el7.x86_64.img
Dracult 版本
/usr/lib/dracult/dracut-version.sh
PPTP Clients Running Behind LEAF
確認載入以下模組
ip_conntrack_pptp
ip_nat_pptp 或 nf_conntrack_pptp
nf_nat_pptp
ip_conntrack_pptp
ip_nat_pptp 或 nf_conntrack_pptp
nf_nat_pptp
2016年5月3日 星期二
檢查 ulogd2 log to MySQL 是否正常執行
#!/bin/sh
# Check Ulogd2 + MySQL
PORT=$(netstat -anp|grep tcp|grep ESTABLISHED|grep :3306|grep ulogd)
PSS=$(ps |grep \[u]logd)
[ "$PSS" = "" ] && /etc/init.d/ulogd start
[ "$PORT" = "" ] && /etc/init.d/ulogd restart
# Check Ulogd2 + MySQL
PORT=$(netstat -anp|grep tcp|grep ESTABLISHED|grep :3306|grep ulogd)
PSS=$(ps |grep \[u]logd)
[ "$PSS" = "" ] && /etc/init.d/ulogd start
[ "$PORT" = "" ] && /etc/init.d/ulogd restart
2016年4月25日 星期一
2016年4月20日 星期三
Tiny Core Linux 使用 ipxe 設定摘要
Tiny Core Linux
download tinycore.iso
mount -o loop tinycore.iso /mnt
cp /mnt/vmlinuz core.gz /var/www/html
ipxe 設定
dhcp
kernel http://192.168.10.1/_tinycore/vmlinuz quiet cde
initrd http://192.168.10.1/_tinycore/core.gz
boot
或
dhcp
kernel http://192.168.10.1/_tinycore4/vmlinuz
initrd http://192.168.10.1/_tinycore4/core.gz
imgargs vmlinuz quiet cde
boot
download tinycore.iso
mount -o loop tinycore.iso /mnt
cp /mnt/vmlinuz core.gz /var/www/html
ipxe 設定
dhcp
kernel http://192.168.10.1/_tinycore/vmlinuz quiet cde
initrd http://192.168.10.1/_tinycore/core.gz
boot
或
dhcp
kernel http://192.168.10.1/_tinycore4/vmlinuz
initrd http://192.168.10.1/_tinycore4/core.gz
imgargs vmlinuz quiet cde
boot
2016年4月19日 星期二
pxelinux 預設載入 ipxe
pxelinux.cfg/default 內容
DEFAULT ipxe.krn dhcp && chain http://192.168.10.1/a.php?mac=${netX/mac}&ip=${netX/ip}&uuid=${uuid}
DEFAULT ipxe
LABEL ipxe
KERNEL ipxe.krn dhcp && chain http://192.168.10.1/a.php?mac=${netX/mac}&ip=${netX/ip}&uuid=${uuid}
DEFAULT ipxe.krn dhcp && chain http://192.168.10.1/a.php?mac=${netX/mac}&ip=${netX/ip}&uuid=${uuid}
DEFAULT ipxe
LABEL ipxe
KERNEL ipxe.krn dhcp && chain http://192.168.10.1/a.php?mac=${netX/mac}&ip=${netX/ip}&uuid=${uuid}
2016年3月10日 星期四
LEAF安裝PPTP Server
載入相關 module
ppp_generic
ppp_mppe
pppoe
pppox
pptp
gre
安裝設定 accelppp
apkg -i accelppp
pppscrpt
libpcre
libcrpto
libssl
編輯 /etc/accel-ppp.conf 內容如下
[modules]
log_syslog
pptp
l2tp
pppoe
auth_mschap_v2
auth_mschap_v1
auth_chap_md5
auth_pap
ippool
chap-secrets
[core]
log-error=/var/log/accel-ppp/core.log
thread-count=4
[ppp]
verbose=1
min-mtu=1280
mtu=1400
mru=1400
ipv4=require
ipv6=deny
[lcp]
echo-interval=30
echo-failure=3
[pptp]
verbose=1
[pppoe]
interface=eth0
verbose=1
[l2tp]
verbose=1
[dns]
#dns1=172.16.0.1
dns2=8.8.8.8
[client-ip-range]
192.168.9.0/24
#disable
[ip-pool]
gw-ip-address=192.168.2.1
192.168.2.2-255
[log]
log-emerg=/var/log/accel-ppp/emerg.log
#syslog=accel-pppd,daemon
copy=1
level=3
[chap-secrets]
gw-ip-address=192.168.0.1
chap-secrets=/etc/ppp/chap-secrets
[cli]
telnet=127.0.0.1:2000
tcp=127.0.0.1:2001
#password=123
編輯帳號密碼檔 /etc/ppp/chap-secrets
user * user *
usera * user *
帳號密碼設定檔 共四欄
# 第一欄為連線帳號,
# 第二欄要設定成/etc/accel-ppp.conf 中的name
# 第三欄為密碼
# 第四欄為連線IP
設定 shorewall
編輯 /etc/shorewall/rules加入
ACCEPT net fw tcp 1723
ACCEPT net fw udp 1701
Ping(ACCEPT) vpn fw
編輯 /etc/shorewall/zones 加入
vpn ipv4
編輯 /etc/shorewall/interfaces 加入
vpn ppp+
編輯 /etc/shorewall/policy 加入
vpn loc ACCEPT
/etc/shorewall/masq
eth0 192.168.2.0/24
相關資源
https://accel-ppp.org/wiki/doku.php?id=configsoho
http://shorewall.net/PPTP.htm
ppp_generic
ppp_mppe
pppoe
pppox
pptp
gre
安裝設定 accelppp
apkg -i accelppp
pppscrpt
libpcre
libcrpto
libssl
編輯 /etc/accel-ppp.conf 內容如下
[modules]
log_syslog
pptp
l2tp
pppoe
auth_mschap_v2
auth_mschap_v1
auth_chap_md5
auth_pap
ippool
chap-secrets
[core]
log-error=/var/log/accel-ppp/core.log
thread-count=4
[ppp]
verbose=1
min-mtu=1280
mtu=1400
mru=1400
ipv4=require
ipv6=deny
[lcp]
echo-interval=30
echo-failure=3
[pptp]
verbose=1
[pppoe]
interface=eth0
verbose=1
[l2tp]
verbose=1
[dns]
#dns1=172.16.0.1
dns2=8.8.8.8
[client-ip-range]
192.168.9.0/24
#disable
[ip-pool]
gw-ip-address=192.168.2.1
192.168.2.2-255
[log]
log-emerg=/var/log/accel-ppp/emerg.log
#syslog=accel-pppd,daemon
copy=1
level=3
[chap-secrets]
gw-ip-address=192.168.0.1
chap-secrets=/etc/ppp/chap-secrets
[cli]
telnet=127.0.0.1:2000
tcp=127.0.0.1:2001
#password=123
編輯帳號密碼檔 /etc/ppp/chap-secrets
user * user *
usera * user *
帳號密碼設定檔 共四欄
# 第一欄為連線帳號,
# 第二欄要設定成/etc/accel-ppp.conf 中的name
# 第三欄為密碼
# 第四欄為連線IP
設定 shorewall
編輯 /etc/shorewall/rules加入
ACCEPT net fw tcp 1723
ACCEPT net fw udp 1701
Ping(ACCEPT) vpn fw
編輯 /etc/shorewall/zones 加入
vpn ipv4
編輯 /etc/shorewall/interfaces 加入
vpn ppp+
編輯 /etc/shorewall/policy 加入
vpn loc ACCEPT
/etc/shorewall/masq
eth0 192.168.2.0/24
相關資源
https://accel-ppp.org/wiki/doku.php?id=configsoho
http://shorewall.net/PPTP.htm
Centos 7 安裝 Gluster server 3.7
方法一
yum install wget
wget -P /etc/yum.repos.d http://download.gluster.org/pub/gluster/glusterfs/LATEST/RHEL/glusterfs-epel.repo
rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
yum install glusterfs-server
方法二:使用 CentOS 儲存 SIG 套件
yum search centos-release-gluster
yum install centos-release-gluster4
yum install glusterfs gluster-cli glusterfs-libs glusterfs-server
systemctl enable glusterd.service
systemctl start glusterd.service
防火牆資訊
節點之間的溝通必須運用 TCP 埠 24007-24008
每個 brick須要一個由 24009 起分派的 TCP 埠
yum install wget
wget -P /etc/yum.repos.d http://download.gluster.org/pub/gluster/glusterfs/LATEST/RHEL/glusterfs-epel.repo
rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
yum install glusterfs-server
方法二:使用 CentOS 儲存 SIG 套件
yum search centos-release-gluster
yum install centos-release-gluster4
yum install glusterfs gluster-cli glusterfs-libs glusterfs-server
systemctl enable glusterd.service
systemctl start glusterd.service
防火牆資訊
節點之間的溝通必須運用 TCP 埠 24007-24008
每個 brick須要一個由 24009 起分派的 TCP 埠
2016年2月19日 星期五
Linux devtmpfs 摘要
功能:
在 Linux 核心啟動早期建立一個初步的 /dev,使一般啟動程序不用等待 udev,縮短開機時間
linux kernel 2.6.32 前作法是
1.建立 static /dev 提供系統 booting
2.booting 完成後,掛載 tmpfs 到 /dev
3.udevadm 重新 trigger kernel
4.udev 動態在 /dev 建立相對應的 device node
linux kernel 2.6.32 使用 devtmpfs
1.Kernel 的 devtmpfs 負責建立 device node(devtmpfs 建立出來的預設屬性是 root:root 0660)
2.udev 接收 kernel 送出的 uevent (依照相對的資訊如 device id product id),載入 kernel module、管理 device node 權限與建立相對應的 symlink file
initramfs 中 init 代碼
if ! mount -t devtmpfs -o size=$tmpfs_size,mode=0755 udev /dev; then
echo "W: devtmpfs not available, falling back to tmpfs for /dev"
mount -t tmpfs -o size=$tmpfs_size,mode=0755 udev /dev
[ -e /dev/console ] || mknod -m 0600 /dev/console c 5 1
[ -e /dev/null ] || mknod /dev/null c 1 3
fi
顯示 devtmpfs
df -T
在 Linux 核心啟動早期建立一個初步的 /dev,使一般啟動程序不用等待 udev,縮短開機時間
linux kernel 2.6.32 前作法是
1.建立 static /dev 提供系統 booting
2.booting 完成後,掛載 tmpfs 到 /dev
3.udevadm 重新 trigger kernel
4.udev 動態在 /dev 建立相對應的 device node
linux kernel 2.6.32 使用 devtmpfs
1.Kernel 的 devtmpfs 負責建立 device node(devtmpfs 建立出來的預設屬性是 root:root 0660)
2.udev 接收 kernel 送出的 uevent (依照相對的資訊如 device id product id),載入 kernel module、管理 device node 權限與建立相對應的 symlink file
initramfs 中 init 代碼
if ! mount -t devtmpfs -o size=$tmpfs_size,mode=0755 udev /dev; then
echo "W: devtmpfs not available, falling back to tmpfs for /dev"
mount -t tmpfs -o size=$tmpfs_size,mode=0755 udev /dev
[ -e /dev/console ] || mknod -m 0600 /dev/console c 5 1
[ -e /dev/null ] || mknod /dev/null c 1 3
fi
顯示 devtmpfs
df -T
NTP Server架設
NTP Server 說明
1.NTP 伺服器會與上層時間伺服器進行時間的同步化
2.預設的情況下,NTP 伺服器不可以使用 ntpdat
3.ntpdate 與 ntpd 不能同時啟用的
安裝設定
1.apkg -i ntpd
apkg -i libcrpto.lrp
2.編輯 /etc/ntp.conf 加入
//設定 Time Server
server tick.stdtime.gov.tw
server tock.stdtime.gov.tw
server clock.stdtime.gov.tw
server watch.stdtime.gov.tw
server time.stdtime.gov.tw
server ntp.ntu.edu.tw
server time.chttl.com.tw
server 0.asia.pool.ntp.org
server 1.asia.pool.ntp.org
server 2.asia.pool.ntp.org
NTPD 相關設定檔
/etc/ntp.conf
/etc/default/ntp
/etc/network/if-up.d/ntp
系統時區設定檔內容 /etc/TZ
CST-8
1.NTP 伺服器會與上層時間伺服器進行時間的同步化
2.預設的情況下,NTP 伺服器不可以使用 ntpdat
3.ntpdate 與 ntpd 不能同時啟用的
安裝設定
1.apkg -i ntpd
apkg -i libcrpto.lrp
2.編輯 /etc/ntp.conf 加入
//設定 Time Server
server tick.stdtime.gov.tw
server tock.stdtime.gov.tw
server clock.stdtime.gov.tw
server watch.stdtime.gov.tw
server time.stdtime.gov.tw
server ntp.ntu.edu.tw
server time.chttl.com.tw
server 0.asia.pool.ntp.org
server 1.asia.pool.ntp.org
server 2.asia.pool.ntp.org
NTPD 相關設定檔
/etc/ntp.conf
/etc/default/ntp
/etc/network/if-up.d/ntp
系統時區設定檔內容 /etc/TZ
CST-8
安裝 Django 1.8 版本
python 3.4 版本 pip install "django<1.9" 取得 Django 版本資訊: python >>> import django >>> django.VERSION
CentOS 7 安裝 Python 3.4
# 1. Install the Software Collections tools: yum install scl-utils # 2. Download a package with repository for your system. # (See the Yum Repositories section below. You can use `wget URL`.) wget https://www.softwarecollections.org/repos/rhscl/rh-python34/epel-7-x86_64/noarch/rhscl-rh-python34-epel-7-x86_64-1-2.noarch.rpm # 3. Install the repo package (on RHEL you will need to enable optional channel first): yum install rhscl-rh-python34-*.noarch.rpm # 4. Install the collection: yum install rh-python34 # 5. Start using software collections: scl enable rh-python34 bash
CentOS 7 安裝 Python 3
Python 3.3 by Software Collections 安裝 SCL 及 Python 3.3: # yum -y install scl-utils # rpm -Uvh https://www.softwarecollections.org/en/scls/rhscl/python33/epel-7-x86_64/download/rhscl-python33-epel-7-x86_64.noarch.rpm # yum -y install python33 使用 SCL 安裝,所以使用下列方式執行: scl enable python33 bash python -V 要使用 Python 3.3 的程式方式 #!/opt/rh/python33/root/usr/bin/python
2016年2月3日 星期三
Opendedup 安裝摘要
Centos 7 安裝
wget http://opendedup.org/downloads/sdfs-latest.rpm
yum install jsvc libxml2 java-1.8.0-openjdk fuse
rpm -iv --force sdfs-latest.rpm
echo "* hard nofile 65535" >> /etc/security/limits.conf
echo "* soft nofile 65535" >> /etc/security/limits.conf
測試
mkfs.sdfs --volume-name=pool0 --volume-capacity=256GB --hash-type=murmur3_128 --io-chunk-size=64
mkdir /media/pool0
mount -t sdfs pool0 /media/pool0/
參考文件 http://www.opendedup.org/quickstart
wget http://opendedup.org/downloads/sdfs-latest.rpm
yum install jsvc libxml2 java-1.8.0-openjdk fuse
rpm -iv --force sdfs-latest.rpm
echo "* hard nofile 65535" >> /etc/security/limits.conf
echo "* soft nofile 65535" >> /etc/security/limits.conf
測試
mkfs.sdfs --volume-name=pool0 --volume-capacity=256GB --hash-type=murmur3_128 --io-chunk-size=64
mkdir /media/pool0
mount -t sdfs pool0 /media/pool0/
參考文件 http://www.opendedup.org/quickstart
2016年1月27日 星期三
CentOS7 安裝 tftp server
yum install tftp-server
systemctl start tftp.socket
相關設定檔:
/etc/xinetd.d/tftp
/usr/lib/systemd/system/tftp.service
/usr/lib/systemd/system/tftp.socket
systemctl start tftp.socket
相關設定檔:
/etc/xinetd.d/tftp
/usr/lib/systemd/system/tftp.service
/usr/lib/systemd/system/tftp.socket
systemctl 常用參數指令
systemctl start systemctl stop systemctl restart systemctl reload systemctl status systemctl enable systemctl disable systemctl is-enabled systemctl list-unit-files systemctl list-units systemctl daemon-reload systemctl --failed
CentOS 7 安裝設定 dnsmasq tftp 功能
yum install dnsmasq
編輯 /etc/dnsmasq.conf
# Enable the TFTP server
enable-tftp
# 設定 tftp 目錄
tftp-root=/var/lib/tftp
建立 tftp 目錄
mkdir /var/lib/tftp
systemctl enable dnsmasq.service
systemctl start dnsmasq.service
編輯 /etc/dnsmasq.conf
# Enable the TFTP server
enable-tftp
# 設定 tftp 目錄
tftp-root=/var/lib/tftp
建立 tftp 目錄
mkdir /var/lib/tftp
systemctl enable dnsmasq.service
systemctl start dnsmasq.service
systemd 日誌系統
systemd 提供自己日誌系統 log,無須安裝
相關指令 journalctl
journalctl -b
journalctl -b -0 #本次啟動 log
journalctl -b -1 #上次啟動 log
journalctl -b -2 #前兩次啟動 log
journalctl --since="2016-1-1 1:1:1"
journalctl --since "10 min ago"
journalctl -f #最新 log
journalctl /usr/lib/systemd/systemd
journalctl _PID=1
journalctl -u netcfg
journalctl -k
journalctl -f -l SYSLOG_FACILITY=10
相關檔案、設定檔
/var/log/journal
/run/systemd/journal
/etc/systemd/journald.conf
相關指令 journalctl
journalctl -b
journalctl -b -0 #本次啟動 log
journalctl -b -1 #上次啟動 log
journalctl -b -2 #前兩次啟動 log
journalctl --since="2016-1-1 1:1:1"
journalctl --since "10 min ago"
journalctl -f #最新 log
journalctl /usr/lib/systemd/systemd
journalctl _PID=1
journalctl -u netcfg
journalctl -k
journalctl -f -l SYSLOG_FACILITY=10
相關檔案、設定檔
/var/log/journal
/run/systemd/journal
/etc/systemd/journald.conf
SysV啟動級別與Systemd目標對照表
0 runlevel0.target, poweroff.target 1, s, single runlevel1.target, rescue.target 2, 4 runlevel2.target, runlevel4.target, multi-user.target 3 runlevel3.target, multi-user.target 5 runlevel5.target, graphical.target 6 runlevel6.target, reboot.target emergency emergency.target
相關指令
systemctl isolate graphical.target #切換啟動級別
systemctl 電源管理指令
systemctl 電源管理指令
重新啟動 systemctl reboot
關機 systemctl poweroff
待機 systemctl suspend
休眠 systemctl hibernate
休眠儲存至硬碟後待機 systemctl hybrid-sleep
其他
安裝 polkit 可提供一般帳號使用電源管理
重新啟動 systemctl reboot
關機 systemctl poweroff
待機 systemctl suspend
休眠 systemctl hibernate
休眠儲存至硬碟後待機 systemctl hybrid-sleep
其他
安裝 polkit 可提供一般帳號使用電源管理
訂閱:
文章 (Atom)