2016年12月30日 星期五

Docker Save, Export 差別

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月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;

去除 ^M

tr -d "\r" < dos_file  > file

sed  "s/\r//" dos_file  > file

dos2unix filename

sudo 不輸入密碼

編輯 /etc/sudoers 加入 ALL ALL=NOPASSWD: /usr/local/bin/script.sh

cifs mount 選項參數

uid 更改目錄擁有者
dir_mode 更改目錄權限
file_mode 更改檔案權限
username 登入帳號
password 登入密碼

2016年12月14日 星期三

Bash 設定未定義變數值

a="123"
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:

2016年11月22日 星期二

GOLANG function 回傳不特定類型值

func a(x int) interface{}{
  if x==1 {   return nil  }
  if x==2 {   return  2 }
  return "string"
}

2016年11月17日 星期四

GOLANG Swap

b,c := 2,3

b,c = c,b

GOLANG Template 輸出至字串

var doc bytes.Buffer

t.Execute(&doc, data)
str := doc.String()

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

2016年10月11日 星期二

kmod 使用摘要

可取代 modprobe, insmod,rmmod,lsmod

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()
        }

列出所有網路遮罩長度 IP

$ip = 0; for ($i=1; $i<33; $i++) printf("%d %s %s\n\n", $i, $ip+= pow(2, 32-$i), long2ip($ip));

GOLANG 程式減肥

go build -ldflags "-s -w" src.go

GOLANG 跨平台編譯

使用 GOOS , GOARCH 環境變數設定
GOOS 表示作業系統 windows, linux
GOARCH 表示架構 386, amd64

2016年9月30日 星期五

Linux 程式減肥

使用指令
1.objcopy
objcopy -S -g apps

2.strip
strip apps

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))
}

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))
}

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")
    fmt.Printf("req=%v\r\n", req)
}

2016年9月29日 星期四

Linux 取得網路流量

cat /proc/net/dev

ip -s link

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

2016年9月19日 星期一

IPMI 取得伺服器電源使用狀態

FreeIPMI
ipmi-dcmi --get-system-power-statistics

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)
    }
}

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

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

CISCO ASA 防火牆顯示運行時間

show version

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

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

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

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;

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

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

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>&-

bash eval摘要

a=b
b=1234
eval echo \$$a

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

CentOS 7更改 hostname

使用 hostnamectl 指令

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;
};

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

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 規則

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

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;

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;

Linux 取得 SMBIOS uuid

dmidecode --type system

2016年6月16日 星期四

BASH script :dirname & basename

function fun_basename { :; echo ${1##*/}; };

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 

  • 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

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

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 更改 Linux 密碼

lxc-stop -n lxc-execute -n passwd

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

2016年5月12日 星期四

LEAF VPN Client相關模組

# VPN

ip_conntrack_pptp
ip_conntrack_proto_gre
ip_nat_pptp

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

PPTP Clients Running Behind LEAF

確認載入以下模組

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

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

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}

2016年3月10日 星期四

手動同步 Glusterfs

gluster volume heal  full

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

php md5() 與 Linux md5sum

md5sum
echo -n 1|md5sum
echo 1|md5sum

PHP
echo md5('1')
echo md5("1\n")

PPTP VPN 無法穿透 Cisco PIX 515

pix 6.3版本可以用
fixup protocol pptp 1723

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 埠 

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

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

安裝 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

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 常用參數指令

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

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

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 可提供一般帳號使用電源管理