網頁

顯示具有 SystemAdministration 標籤的文章。 顯示所有文章
顯示具有 SystemAdministration 標籤的文章。 顯示所有文章

2015年4月8日 星期三

DDNS on FreeBSD 10

最近種花電信在特價推 300M/100M ,於是弄了台 Brix GB-BXBT-1900 來玩,對於這種小板子就是無法抗拒。題外話,在台中丟的是 GB-BXi3H-4010 質感跟大小跟功能贏很多,當然比較貴一點點,不過有兩組 sodimm 跟 msata + HDD 還比較小台,唯一要注意的是沒有 D-SUB。

家裡用的就沒特別去申請固定 IP ,然後種花電信又老奸巨猾, 100M 以上的故意不給請 PPPOE 配發的偽固定 IP。沒關係,沒做啥大事業,用 no-ip 搞定,結果沒想到第二天就 GG 了,根本就不知道配去哪根電線桿了,於是只好來自幹吧。

目標:client 可以透過 bind 的 dynamic update 機制自動向 dns server 更新自己的 ip 。

參考來源

做法:

Server:


pkg install bind910
mkdir -p /usr/local/etc/namedb/keys
cd /usr/local/etc/namedb/keys
產生所需密鑰
dnssec-keygen -b 512 -a HMAC-SHA512 -v 2 -n HOST my.domain.
vim /usr/local/etc/namedb/named.conf
key my.domain. {
        algorithm "HMAC-SHA512";
        secret "COPY FROM PRIVATE KEY";
};

zone "my.domain" {
        type master;
        file "../dynamic/zone.fwd.my.domain";
        also-notify { SLAVE_DNS_IP;};
        allow-transfer { SLAVE_DNS_IP;};
        allow-update{
                key my.domain;
        };
};

Client:

pkg install bind-tools
把 Server 產的 Key 想辦法(用SCP)送回 client
vim update.sh
#!/bin/sh
MYNS="host.my.domain"
NSSERVER="ns.my.domain"
KEY="KeyPATH.private"
NOW_IP=`ifconfig tun0 | grep inet | cut -d ' ' -f 2`;
OLD_IP=`nslookup -type=a $MYNS | tail -n 3 | grep Address | cut -d ' ' -f 2`;

if [ $OLD_IP != $NOW_IP ]
then
echo "update IP: $NOW_IP to DDNS Server"
echo "server $NSSERVER " >> /tmp/.ddns.$$
echo "update delete $MYNS. A " >> /tmp/.ddns.$$
echo "update add $MYNS. 30 A $NOW_IP" >> /tmp/.ddns.$$
echo "" >> /tmp/.ddns.$$
nsupdate -k $KEY < /tmp/.ddns.$$
rm /tmp/.ddns.$$
fi
exit 0
然後 vim /etc/ppp/ppp.linkup 
HiNET:
  !bg /PATH_TO_THE_SCRIPT/updatens.sh
當中 HiNET 是 /etc/ppp/ppp.conf 裡面對應的 Label 搞定收工。

2014年11月27日 星期四

OSX 下的 ls color

灰白的世界令人不喜悅。
 所以加點顏色吧,已經習慣的配色,假設有換 csh 在 .cshrc 裡面加上
        setenv CLICOLOR 1
        setenv LSCOLORS ExGxFxdxCxDxDxBxBxExEx

2014年11月17日 星期一

在 OSX 上開機後自動啟動 vs-mda-remote

本來想得很簡單,應該是 /etc/rc.local 寫一下就好了沒想到還要轉一個大彎去用 launchd。

其實也不難,只是要翻一下文件跟範例,有需要的就笑納吧。
新增 /Library/LaunchDaemons/vs-mda-remote.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key><string>VsMdaAgent</string>
    <key>ProgramArguments</key>
        <array>
        <string>/usr/local/bin/node</string>
        <string>/usr/local/bin/vs-mda-remote</string>
        <string>--secure</string>
        <string>false</string>
        <string>--serverDir</string>
        <string>/Users/VsMdaAgent/remote-builds/builds</string>
        </array>
    <key>KeepAlive</key><true>
    <key>LaunchOnlyOnce</key><true>
    <key>UserName</key><string>VsMdaAgent</string>
  </dict>
</plist>
然後測試一下:
啟動
launchctl load -F /Library/LaunchDaemons/tw.com.skymirror.vs-mda-remote.plist
停止
launchctl load -F /Library/LaunchDaemons/tw.com.skymirror.vs-mda-remote.plist
看一下 /var/log/system.log 有沒有錯誤訊息,然後 netstat -an |grep 3000 看有沒有跑起來。重開看看運作正不正常。

2014年7月17日 星期四

Upgrade FreeBSD to 9.3-RELEASE

當一個剛被放出來的笨蛋總要複習一下,乖乖地看 Release NoteHandBook
  • 升級現有 9.1 到 9.3
    freebsd-update upgrade -r 9.3-RELEASE
    freebsd-update install
    
  • 更新 portmaster / pkg
    portmaster portmaster pkg
  • 更新所有套件
    portmaster -a
  • 要注意的是 redmine 在更新的時候出現 ASCII-8BIT TO UTF-8 的問題,是因為偷懶直接用舊的設定檔。升級到 2.5.2 之後的 database adaptor 要換成 mysql2。

2006年1月19日 星期四

Wordpress Plugin: Category Visibility

前兩天在跟鹿人聊到 Wordpress 的 plugins 的時候,跑到 wordpress codexplugins 區看到 restriction 這分類裡好像有些符合我之前想要的需求,於是抓了 Category Visibility 這個 plugin 下來。他的簡介中說他能夠控制特定的 categories 要不要在 frontpage/rss feed/categoriez list/search result 中出現,甚至還能夠依據 user level 來做判斷。

和一般的 plugin 一樣,只要去這裡把他的原始檔抓下來,rename 成 .php 丟到 wordpress 的 plugin 目錄裡就可以使用了。不過好像一開始至少要去 Category Visibility 的地方勾一勾 submit 一次,因為他的 table 在那邊才會建立。

不幸的是我的 categories list 裝了他之後就爛掉了。剛剛花點時間找了一下發現,爛在兩個地方:

一個是他沒有處理好 nested categories,不會正確的把標籤給 close,在他 plugin 的 code 當中會看到原來 alter_vis_catlist 裡面有:

<?php
if (preg_match("/href/", $thelist)) {
$newlist = "";
$children = 0;
$linklist = preg_split('/\t/', $thelist);
foreach ($linklist as $link) {
if(preg_match("/class.*children/", $link)) {
//$children = 1;
$children += 1; // fix nested cat
$newlist .= $link;
} elseif(preg_match("//", $link) && $children) {
//$children = 0;
$children -= 1; // fix nested cat
$newlist .= $link;
} else {
$thiscatname = strip_tags($link);
$thiscatname = preg_replace("/\s+\(\d+\)\s+/", "", $thiscatname);
$thiscatname = trim($thiscatname);
if(!empty($thiscatname)) {
$cats = $wpdb->get_results("SELECT cat_ID from $wpdb->categories WHERE cat_name='$thiscatname' LIMIT 1");
if ($cats) {
foreach ($cats as $cat) {
$thiscat = $cat->cat_ID;
}
if($wpdb->query("SELECT cat_ID FROM $cat_visibility WHERE cat_ID=$thiscat AND list=1 AND user_level

照上面的方式修改一般人應該就沒有問題了。可是因為我還有手動改讓分類顯示成 category 的 description ,所以底下這段得修改:
get_results("SELECT cat_ID from $wpdb->categories WHERE cat_name='$thiscatname' LIMIT 1"); ?>
把他改成

get_results("SELECT cat_ID from $wpdb->categories WHERE category_description='$thiscatname' LIMIT 1"); ?>
就正常了。

2005年11月9日 星期三

MySQL 升級,phpBB UTF8 化

恩,非常悲苦。為了在 RW 跑個 portupgrade -acCv 受盡苦難。首先我要說,在 FreeBSD 下還是保險起見不要用 -O3 ,代價太大了。這幾天 RW 重編 Apache2 的次數我想不下二十次!到最後發現竟然是 make.conf 裡的 -O3 在搗蛋。而且因為同時炸太多東西了,所以根本很難發現誓死那個。首先, Perl 掰了,然後 trac 的 Python ,然後 php .. 這個教訓告訴我們不要手賤,等等想到再來把 FastCGI 給裝回去吧 -_-。

爆炸最大的大概是 MySQL ,不知道什麼年代開始,RW 的 MySQL 就變成沒有人敢動的版本,永遠都停在 4.0.20 ...某次不小心升級之後所有 database 全爛,也沒有人有空去看 why ,於是偉大的 clode 就不知道去那弄了 4.0.20 的 package 來,反正誰不小心幹掉就直接用 package 硬裝。(很勇敢對吧?)。很不巧,這次又是我手賤,執意要把 MySQL 換上去,並且還想「順便」把裡面的 database 「全面」 UTF8 化,所以代價就是好幾天幾乎都沒睡超過四小時。不過好在,最後似乎轉過去了。雖然中間應該多少損失一些資料。首先,在 MySQL 4.0.20 的時候先把資料給 dump 出來:

mysqldump -uroot rwphpbb > rwphpbb.sql

我 看到很多人說在 dump 的時候要記得設 -default-char-set=latin1 ,我之前也確實必須要這樣設定才能 dump 出正確的檔案,不過不知道是因為之前編的關係還是版本問題,加了之後反而沒辦法 dump ,所以...。然後就把 MySQL 升級,不過因為是用 portupgrade ,他升到了 4.x ,於是我手動幹掉裝成 MySQL 5 (反正要痛苦就一次痛苦個夠,反正這次我做了很充分的備份),不過健忘症發作,忘了下 -default-charset=utf8 ,所以變成在 rc.conf 裡面加上:

mysql_enable="YES"
mysql_args="--default-character-set=utf8"

然後中間經歷了很多 Apache/PHP 的爆炸就略過不提。處理完之後便拿 RW 的 phpBB 來開刀,首先照著我之前那篇 wordpress 的方式把 .sql 檔案轉換好:

*add follow line to .sql file

SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;

*use vim to replace charset

(:1,xxxs/latin1/utf8/g)
這裡我是把 big5e 都換成 utf8 ,雖然我不確定對不對...

*use iconv/piconv 轉換 database big5->utf8

piconv -f big5 -t utf8 rwphpbb_utf8.sql > aaa.sql

然後把他匯入 MySQL,在啟動 MySQL 之前先確定剛剛的 rc.conf 已經設定好,這樣才會把預設的 table 蓋成 UTF8 而不用指定,另外就是 my.cnf 的設定,我暫時是
cp /usr/local/share/mysql/my-medium.cnf /var/db/mysql/my.cnf 然後在 [mysqld] 的 section 加上 init_connect = 'SET NAMES UTF8;' (反正都要全面 UTF8 化了),然後蓋 database 、匯入、設定使用者(因為我是把整個資料庫砍掉重鍊)。

*create database

mysqladmin -uroot create rwphpbb

*restore database

mysql -f -u root rwphpbb < aaa.sql
(用-f 是因為我遇到很多錯誤導致做到一半就爛了,所以強制做完,至於錯誤是啥我也不知道 -_-)

*create database user

mysql> GRANT ALL PRIVILEGES ON 資料庫名稱.* to 使用者名稱@localhost IDENTIFIED BY '密碼';

然後接下來處理 phpBB。如果你看到:

phpBB : Critical Error

Could not connect to the database

請 到 config.php 裡面把 $dbms = 'mysql'; 換成 $dbms = 'mysql4'; 然後燒香拜拜看看連不連的上。連上的話沒有意外你會發現一狗票亂碼,不要擔心,這是正常的。我爬了一些文章後發現 phpBB 官方(或者說是台灣語系的站台)並沒有釋出 UTF8 版本的 Language Pack ,所以很不幸的得自己做。不過不難。只是把中文語系那個目錄的 lang_main.php 裡的 $lang['ENCODING'] = 'big5'; 換成 $lang['ENCODING'] = 'UTF-8'; ,然後把 email 目錄裡的所有檔案的第二行 Charset: Big5 換成 Charset: UTF-8就好了。可以參考 這裡 。或是懶得搞的話可以抓我轉好的 phpBB2.0.17 UTF8 中文語系包。 要注意解開前先把你的 lang_chinese_traditional_taiwan 目錄 rename 一下,本來我是想弄個類似 lang_chinese_traditional_taiwan-UTF8 的語系,可是後來發現這樣會爆炸很大,所以只好用原來的 lang_chinese_traditional_taiwan ,所以你可能需要把 lang_chinese_traditional_taiwan rename 成 lang_chinese_traditional_taiwan.big5 之類的。理論上沒意外的話進去應該會看到 UTF8 的畫面了,感動吧!你可能會注意到好像主畫面是 Big5/UTF8 混合,很神奇吧 -_-。找半天不知道是啥原因,想說應該是 cache ,於是把 phpBB2 裡面的 cache/cache2 都幹掉了還是一樣...到最後才發現,原來去新蓋一個討論板他就會清掉了,那不然他不是存在 cache 裡面是存在那啊 -_-?。

剩下的,就等其他人(使用者)遇到問題再說吧,我跟 phpBB 超不熟,連用都沒在用 :~ 。

 

2005年11月7日 星期一

perl locale

現在升級 RW 到 6.0-R (很幸運的升完之後我還連的到他 -_-),然後準備來大升級。卻忽然發現 perl 一直死:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LC_ALL = "zh_TW.Big5",
LC_CTYPE = "en_US.ISO8859-1",
LANG = "zh_TW.Big5"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

結果 locale -a 看了一下發現,原來 en_US.ISO_8859-1 改成 en_US.ISO8859-1 了。把 /etc/csh.cshrc 跟 ~/.cshrc 改一改之後想說就會好了,沒想到還是爛的。後來很用力的把 perl 給重 make 一次就好了 -_-。

2005年10月27日 星期四

OpenVPN

一陣子以前(好像是今年寒假左右?)曾經為 RW 架了 OpenVPN ,忘了是為什麼了,反正不外乎就是要搞邪惡計畫或者是玩遊戲。之前裝的時候還記得好像剛好是 2.0 RC12 然後剛好出 2.0 RC13 , FreeBSD 的 Ports 還在舊的 1.1.2 的樣子,所以我用手動的方式搞上去的。印象中好像還用 Static Key 搞了很久,期間一直都沒注意到他說如果要用 tap driver 加上 server mode 的話得用 TLS/SSL 而不能用 preshare static key ,然後因此耍了蠻久的白痴。而且那時他沒有提供所謂的 EASY-RSA 這目錄裡的 script ,不然也許是我眼瞎沒找到,所以餵了憑證也生了好久。又因為要為每個人都建憑證大麻煩了,在那邊蓋半天之後才發現原來有 duplicate-cn 的選項讓大家都能用同一份 key ,後來把 key 跟著 OpenVPN GUI for Windows 給包起來給要用的人抓之後才好不容易弄好。

現在由於學校的無線網路 仍然處於門戶大開的階段(完全沒有加密),也因此在我之前的小黑上完全不敢裝 KKMAN / PCMAN 之類的軟體,也不敢連 MUD ,所以在打密碼的時後都得再三確認這網頁到底有沒有加密。雖然說用 ssh tunnel (經由 putty or pietty 來建立)到某台機器的 proxy 可以解決大部分的問題,不過這只限於 http protocol 。也因此又讓我興起了再來裝 OpenVPN 的念頭。擇日不如撞日,於是乎昨天帶完os的課後輔導後就在 LAB 動手了。