Raspberry Pi 3, fax

https://wp.me/ph3BR-27R


sudo apt-get update
sudo apt-get upgrade -y
sudo rpi-update
sudo reboot


sudo apt-get install hylafax-server sendmail -y --force-yes
find /sys/bus/usb/devices/usb*/ -name dev

tty/ttyACM0/dev is my USB fax modem found

 

special note, install sendmail, did not workout

uses ssmtp and gmail, works for single fax to email address, do not know why

Normal fax line, testing is expensive and wasting money, try local loop fax line, uses +12V battery and two 1K resistors to pull up the fax line, it is used to simulates phone line power of telephone company, no dial tone, and manually answering fax machine for testing, or abort (not working on Pi 3), on Pi 3 terminal


sudo faxanswer -h fax ttyACM0

sudo faxabort ttyACM0

 

restart hylafax


sudo /etc/init.d/hylafax restart


sudo faxsetup

 

 

Uses Gmail account and Pi 3 to send email to yourself for testing
reference:
https://stackoverflow.com/questions/38391412/raspberry-pi-send-mail-from-command-line-using-gmail-smtp-server

Google account setting
# Login to your gmail account
# Go to: Settings -> Accounts and Import -> Other Google Account settings
# Go to: Personal info & privacy -> Account overview
# Go to: Sign-in & security -> Connect apps & sites
# Set option Allow less secure apps to ON

 

Now, on Pi 3, this is complete and tested command line script
copy and paste to Pi terminal, will run.
on Raspberry Pi 3, terminal,

 
## Install SSMTP & GEDIT, for send email, Gedit for GUI text editor, easy than uses vi
sudo apt-get install ssmtp gedit

## Save & copy original conf file to be .bak
sudo cp /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.bak

## Create new conf file (with vi, or some other text editor)
## sudo vi /etc/ssmtp/ssmtp.conf

## open GUI editor as root previlage, edit /etc/ssmtp/ssmtp.conf
gksudo gedit /etc/ssmtp/ssmtp.conf

 

 

————- ssmtp.conf, file content is following————
root=your_account@gmail.com
mailhub=smtp.gmail.com:587

FromLineOverride=YES
AuthUser=your_account@gmail.com
AuthPass=your_password
UseSTARTTLS=YES
UseTLS=YES
# Debug=Yes

————- ssmtp.conf, file content is end————

 

 

on Raspberry Pi 3, terminal again,

## Secure conf file
sudo groupadd ssmtp
sudo chown :ssmtp /etc/ssmtp/ssmtp.conf

## If you have error on this step like ''cannot access'' ...
## you must find ssmtp file and use that path: sudo find / -name "ssmtp"

sudo chown :ssmtp /usr/sbin/ssmtp
sudo chmod 640 /etc/ssmtp/ssmtp.conf
sudo chmod g+s /usr/sbin/ssmtp

## Sending mail to yourself, from (only one) command line 
echo "This is a test echo by command line" | ssmtp your_account@gmail.com

## or
printf "To: your_account@gmail.com\nFrom: RaspberryPi3\nSubject: printf Testing send mail from Raspberry\n\nThis is test. \nBest Regards\n" | ssmtp -t

 

 

build test.txt as email template for testing,

gksudo gedit test.txt

 

 

——————– content of test.txt———————
To: your_account@gmail.com
From: your_account@gmail.com
Subject: Testing send mail from Raspberry, by send test.txt file

This is test mail (body)

Best Regards!

——————– content of test.txt end——————–

 

 

 

on Raspberry Pi 3, terminal again, Now you can send mail from file

ssmtp your_account@gmail.com < test.txt

 

 

How to send photo as attachment
on Raspberry Pi 3, terminal again, Now you can send mail from file
ref : https://unix.stackexchange.com/questions/381131/simplest-way-to-send-mail-with-image-attachment-from-command-line-using-gmail

sudo apt-get update
sudo apt-get install mpack
mpack -s "test photo" /home/pi/test_photo.png your_account@gmail.com

 

command line to open photo viewer with root previlage, able to view fax by received hylafax, /var/spool/hylafax/recvq

gksudo gpicview

 

Viewing faxes through internet browser

To do that install apache web server, then add a link to your faxes

apt-get update
apt-get install apache2
cd /var/www/html
ln -s /var/spool/hylafax/recvq fax

 

broswer to open http://localhost/fax/

廣告

Raspberry Pi Zero W Broadcom BCM2835

http://wp.me/ph3BR-26e

 

最近一年聽說 BROADCOM 這家公司賣給了 AVAGO, 同時部分的無線產品或者 IoT 則賣給了 CYPRESS, 為了一個網路收音機當時還特意搜尋了一下有關的 IC 和產品, 通常 BROADCOM 的 SoC 都是不公開 DATASHEET 的, 除了特殊的用途, 例如部分開源的 Raspberry Pi, 所使用的 BCM2835.

http://www.cypress.com/news/cypress-acquire-broadcom-s-wireless-internet-things-business-0

Cypress to Acquire Broadcom_s Wireless Internet of Things Business

例如, 原來 BROADCOM 的 IC 編號 BCM43438, 也就順理成章變成了 CYW43438, 序號一樣可是排頭變了樣

http://www.cypress.com/file/298076/download

002-14796_CYW43438_Single-Chip_IEEE_802.11ac_b_g_n_MAC_Baseband_Radio_with_Integrated_Bluetooth_4.1_and_FM_Receiver

 

好多年前, 一家叫 MARVEL 的公司, 也曾經推出 U$9.9 的單板機電腦, 可是沒發成落幕了, 專注在硬碟的處理器賺錢, 對這樣的民間玩意沒了興趣. 最近聽說 Raspberry Pi 有推出 U$5 的單板機電腦, 名為 Raspberry Pi Zero W, 可是雷聲大雨點小, 過了差不多一年還是沒有合適的零售, 而且買的話就加了一堆有的沒有的, 要價台幣大約 2000 元的所謂套裝. 雖然上次用了 Pi 3 一套也差不多 1600+ 元, 但是還是很貴的單板機電腦. 最近消息說要鋪貨了, Pi Zero W 大約U$10, 可以單買了, 外殼和電源的套裝約 800 台幣, 那……既然不惜 HARD SALE, 那只有慢慢等到滿街鋪貨再買, 沒必要先作白老鼠.

要不要繼續改善傳真伺服器的項目呢?! 現時的 PC 組合是耗電的, 不過一般使用者容易處理, Windows XP 或者 UBUNTU 就可以裝好, 好處是用舊電腦就可以, 不需要投資新電腦, 壞處是體積巨大, 30W比較耗電.

另外一個可能要繼續玩的就是網路收音機, ESP8266 的那個已經暫時沒有時間改進, 因為軟解 MP3, 再加上選台的話RAM 不夠用, 還沒研究怎樣改, 如果用 Pi, 自然硬件高級了許多, 而且是上 LINUX 操作系統, 應用程序開發相對容易, 不受限於 RAM 過小.

同樣的問題, 開源資訊越充足, 應用的層面越廣, 時間可以培養意想不到的銷量. 首先要做的是公開所有開發需要用到的資訊, 不然都是 EMBEDDED secret, 考古一樣的話難以在當代發揚光大, 可是人類都是靠這樣藏揶保留一些秘笈而賺錢的, 說的好聽叫做 PROPRIETARY, 說的難聽就是有剽竊盜用的疑慮, 所以開源最大的誘因就是歡迎剽竊盜用, 賣硬件的就最喜歡, 同時開源也是最大阻力, 賣軟件的那些開源都是依賴基金會提供資金在運作, 其實沒有便宜到, 一樣在花錢, 只是收入來源不同.

一刀兩面, 愛開發的人數極少, 使用者的人數可以是巨量, ANDROID 跟 IOS 分庭抗禮就是最淺顯的例子, 沒有誰勝誰負, 只有用者越多利潤越多. 要推廣順利, 分銷商要讓利使開源的硬件留足夠的空間給使用者, 不然難買難選, 圈養在小圈子就是老鼠尾巴長瘡疤等著被滅掉, 任何開源的硬件都可被替代.

 

Raspberry Pi 3, shell script and ./desktop

http://wp.me/ph3BR-1Gl

 

使用者很不满意要打命令行才能完成抓图的动作,例如这记录的状况,http://wp.me/ph3BR-1G2

经过了几天使用后,同时间在网路上请教别人,终于得到了一个满意的方法,也就达到满意的效果了。详情看这,http://www.hkepc.com/forum/viewthread.php?tid=2281234

参考:

http://www.raspberry-projects.com/pi/pi-operating-systems/raspbian/gui/desktop-shortcuts

https://specifications.freedesktop.org/desktop-entry-spec/latest/

 

具体做法,桌面建立一个文字档 a.desktop,内容如下,存档后他会自动变成可执行的式样,同时显示名称也不再是 a.desktop,除非再次编辑,点两下就执行了那个 SHELL SCRIPT, capture_screen.sh, 不再有多余的提示了。

a.desktop,内容如下,

[Desktop Entry]
Name=snag_windows
Comment=call scrot -b -s to capture a window screen, screen capture at Desktop
Icon=/usr/share/pixmaps/openbox.xpm
Exec=lxterminal -t "Screen capture" --working-directory=/home/pi/Desktop/ -e ./capture_screen.sh
Type=Application
Encoding=UTF-8
Terminal=false
Categories=None;

 

桌面建立一个文字档 capture_screen.sh, 内容如下,


#!/usr/bin/env bash

echo hello, screen shot of active windows with border

scrot -s -b

存档后, 记得 CHMOD +X 让 LINUX 知道它是可执行档

2016-04-15-234028_903x812_scrot

 

 

如果要赋予自己写的那个小程序 snap (没有GUI的) 同样的功能,类似的方法,不过,抓图的自动存档会出现在 /home/pi, 而不是在桌面.看着篇, http://wp.me/ph3BR-1G2 ,先来编译好snap, 然后桌面建立一个文字档 b.desktop,内容如下,存档后他会自动变成可执行的式样,同时显示名称也不再是 b.desktop,除非再次编辑,点两下就执行了那个 snap, 不再有多余的提示了。

b.desktop,内容如下,


[Desktop Entry]
Name=snap_to_/home/pi
Comment=Snap capture window screen, Terminal=true, a must, screen captured and save to /home/pi, not Desktop
Icon=/usr/share/pixmaps/openbox.png
Exec=/home/pi/Desktop/snap
Type=Application
Encoding=UTF-8
Terminal=true
Categories=None;

 

 

 

Raspberry Pi 3, asm program to build executable file, screen capture

http://wp.me/ph3BR-1G2

 

有了小电脑,还是64位元的,一整个是高大尚的级别

除了INTEL高级贵到死的 x86系统的CPU,还真没有实际使用过64位元的电脑,ANDROID 手机的那些应该不算。

这个Raspberry Pi 3, 用的是 BROADCOM 出产的IC,ARM 系列的 64位元. 好久以前实验过在 UBUNTU 上编译C 的源码,感觉还好,这次为了要在 Pi 截取画面,使用了 scrot 的这个程序,但是不太方便,因为要在 TERMINAL 底下输入命令行来执行,一众普通用家不习惯,希望按个按钮就可以,她们说在WINDOWS 底下用习惯了那个 snap 或者 snagit, 按一下就行,怎麽高级的 LINUX 就不行了呢。。。。。。。。。当然,直接按键盘那个 PrintScreen 可以把整个荧幕抓下来存档在 /home/pi,可那不够自由呀,俺只要某个视窗的画面或者荧幕某个区域的画面就没辙了。

题外话,这篇用这小电脑和那个智能拼音输入法打的,他就给简体字,不出繁体字,因为不会注音符号。其实没关系,世界上很多人通多国语言文字,所以大不必拘泥繁体简体,会可以不用,不会就学着点,好事。听到有些朋友说鄙视简体字,说看着就难过,另外一些却说看到繁体字就烦。那只是意识形态问题,或者说者无心,纯粹是现露出少看外面的世界而缺少开放的眼界,自己看着办吧,反正俺看得都简单也高兴:)

要抓取画面,所以就实验了两个方法,

  1. 写SHELL SCRIPT 来启动 scrot, 并带入参数 -b -s, 然后让使用者快速点两下执行,谁知道,每次都跳出来问,希望怎样执行,不像UBUNTU可以预设一次就好;
  2. 写个小小的程序,呼叫并启动 scrot, 并带入参数 -b -s ,搜寻了一下网路,乱套用,居然瞎猫碰到死耗子,也成功。。。不过呢, 还是每次都跳出来问,只是选项少了也不需要 CHMOD +X。以前玩过 WIN32的 ASM / C,呼叫可以用 ShellExec,但是 LINUX 对应是 system, 基本上是网上看到抄来用的,参照 hello world 的那个源码,看到他写的有关呼叫第三方应用程序 printf 的做法,然后就照猫画虎,给他乱来,反正不要钱。。。。。。
    string: .asciz "\nHello World! This is xialaba and Linux programming\n\n"
    
    .extern printf
    
    ldr r0, =string @ print hello world
    bl printf
    
    

    GNU ARM assembly 程序的注释用 @ 开始,和 x86 或者其他 MCU 使用分号(;)不同。

 

组译和连接用以下命令,都是 LINUX 自带的编译工具

as -o hello.o hello.s
gcc -o snap hello.o

2016-04-14-230729_609x175_scrot

 

 

最后输出一个可执行档案,名为 snap

速点两下执行,直接按 [执行], 然后随便选个 WINDOW 点一下,截图就得到并存档在桌面上了,结果类似下面的图。

2016-04-15-000001_527x300_scrot

源码在这里,

@ REF : http://www.science.smith.edu/dftwiki/index.php/Tutorial:_Assembly_Language_with_the_Raspberry_Pi
@ xiaolaba
@ 2016-04-14
@ modified to test 'system' call and to invoke scrot to capture a screen

@ how to assenble and link, open terminal, type following, but remove @
@ as -o hello.o hello.s
@ gcc -o snap hello.o
@ hello.s
@ D. Thiebaut
@ Just your regular Hello World program!
@
@ ---------------------------------------
@ Data Section
@ ---------------------------------------

.data
string: .asciz "\nHello World! This is xialaba and Linux programming\n\n"
para : .asciz "scrot -b -s"

@ ---------------------------------------
@ Code Section
@ ---------------------------------------

.text
.global main
.extern printf
.extern system

main:
push {ip, lr}

ldr r0, =string @ print hello world
bl printf

ldr r0, =para @ invoke scrot to capture screen
bl system

pop {ip, pc}

 

 

SHELL SCRIPT 的源码在这里,虽然不好用,但是也是学习的过程之一,


#!/usr/bin/env bash

echo hello, screen shot of active windows with border

scrot -s -b

Openwrt, TP-Link MR3020 and OpenVPN installation every time at power up

http://wp.me/ph3BR-1EL

 

有些鳥客戶的公司, 需要供應商提供固定IP才能連接它們的採購系統, 才能讓你抓取訂單, 才能讓你安排交貨, 據說是為了 [保安理由]. 到底有多可靠, 天曉得. 用這個方法, 不會更安全, 但是製造很多麻煩.

問題來了, 現代很多代理商都是跑單幫的所謂代理商, 也有是兩人的蚊型企業 (還能歸類為企業!?), 或者租個小地方就干起來的非大型企業, 常常每個人都是用手機上網, 哪裡來的的固定IP呢! 如果不知道甚麼是固定IP, 試試看上網連接到一些只提供HTTP查詢的網站, 它會回應並顯示你的IP, 例如 :

http://ipecho.net/

https://myip.com.tw/

如果你用手機上網, 大概每次進入地下室再出來, 訊號斷掉重來, 你的 IP 就變化了. 如果是室內的固網, 像是中華電信, 遠傳, 中國移動, AT&T 等等, 電信公司有個DSL數據機(小烏龜)或者光纖盒子放在你的屋子內租給你用, 除非申請固定 IP, 不然絕大部分都是浮動IP的, 只要小烏龜斷電或重新啟動, 你的 IP 就變化了. 如果要, 那就是必須申請一個固定IP在一個固定的地方上網, 對方的才能看到你是固定IP而不會隨時改變.

需要固定IP, 對於流動的人口來說, 解決方法很早以前已經有 VPN 這個東西. 好久以前, 設定一個 Microsoft Outlook, 接收公司用的 EMAIL, 設定初期已經要使用 VPN 連接到總公司才成, 後來也用過 LOUTS, 也是要撥接電話回總公司才能收發EMAIL, 那時候的民用的 INTERNET 還沒發達 (大約公元2000年以前), 33.6K 的MODEM已經是最快速的, 還要自己設定撥號連線的Trumpet軟體, 應該稱為窄頻上網, 所以出差最大筆的開銷是長途電話費用, 平均都是4000多元的的電話費, 只為了在飯店撥電話回公司的MODEM收發EMAIL. 後來, 有了寬頻, 2M, 10M, 20M, 100M, 有了 WIFI, 有了 SKYPE, 有了 WECHAT 之類的, 長途電話費就變成0, 取而代之的是漫遊上網費用, 今天就有了短期租約的當地上網卡, 費用大的問題是解決了, 但是, 還需要 VPN, 這樣鳥客戶的公司需要供應商提供固定IP, 就是一例, 當然, 出差到中國境內, 想要 GOOGLE, YOUTUBE 等等, 也需要這個, 沒特別理由, 就是愛自有和受管制的對立.

每次讓那些妹妹試驗 VPN, 總會鬧出各種小問題, 用電腦撥接 VPN, 都會有些麻煩和插曲. 所以試驗一下, 每人配個小小的 ROUTER, 在飯店自動配接VPN, 成為一個WIFI熱點讓她們在不知不覺中連上VPN, 看來是最低成本也有最有效的方案之一. 因此花了3天時間, 研究了一下 OpenVPN 還有一些剩餘物資和最新產品, 例如 ASUS RT-N13U B1, TP-LINK MR3020, Raspberry Pi 3, 這些都是 LINUX 的小電腦, 功能和價格都不貴. 結果是 ASUS RT-N13U B1 爛透了, 設定完畢斷電重開機就錯誤百出, 使用中也會莫名當掉, 翻出送修紀錄, 應該是沒修過就刷韌體送回來的, 一直都有問題就不再送修報廢了事, 現在改機刷成 OpenWRT 的韌體, 狀況一致就說明是機王爛貨, 拆來機殼, 裡面的 PCB 印刷著REV.1.20, 沒有貼MAC Adress標籤, CPU 的屏蔽鐵殼上面超多指紋, 都氧化成了黑色, 而且CPU和穩壓管很高溫. 至於 TP-LINK MR3020呢, 當年手機的費用高, 個人熱點也不流行, 採用了一陣子, 慢慢淘汰了, 改機刷成 OpenWRT 的韌體, 因為只有 4M FLASH, 32M RAM, 容量不過安裝其它的軟體 (OpenVPN). 另外Raspberry Pi 3 是2016年3月最新的產品, 大約2000台幣, 很容易就安裝好, 算是最簡單的, 可玩性也最高, 但是比對 TP-Link TL-MR3020 v1 的500圓售價, 當然高了4倍. 因為這樣, 有需要多些了解 LINUX 的操作和上網建立. 無意間看到這篇網路文章,

https://blog.zauberstuhl.de/openwrt_tplink_openvpn/

http://blog.ciberterminal.net/2013/06/18/openvpn-in-the-tp-link-wr841nd/

它們的大意是, 例如 TP-LINK MR3020, TP-Link WR841N(D) 這類低階的 ROUTER, 雖然 FLASH 只有 4M, 但是 RAM 有 32M, 刷好 OpenWRT 的系統後, FLASH 容量幾乎耗盡, 但是 RAM 的容量還有約14M沒動到, 稱為 tmpfs (臨時存放文件的空間, 可隨時讀寫), 可以作為安裝 OpenVPN 或其他軟體的用途, 不過呢, 拔電源後就會化為烏有. 所以他們寫了一個劇本, 每次上電, ROUTER 自動連接 INTERNET 後, 自動下載 OpenVPN 和相關的軟體, 安裝在 tmpfs 這個地方, 並且解壓縮和自動安裝, 而 OpenVPN 的設定檔案, 則寫死在 FLASH 裡面, 因為體積很小, 所以就解決了這個問題. 有空來試試這個方法.

以下兩段劇本是複製那兩個網站的, 版權屬於源作者, 作為學習 SHELL SCRIPT 的基礎.


#REF : https://blog.zauberstuhl.de/openwrt_tplink_openvpn/
# Do not forget setting the right environment variables and we are good to go (/etc/profile):
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tmp/libopenssl/lib
#export PATH=$PATH:/tmp/openvpn/bin


#!/bin/sh /etc/rc.common

START=99

. /etc/profile

install() {
local OVPNPATH=/tmp/openvpn
local OSSLPATH=/tmp/libopenssl
[ ! -d ${OVPNPATH} ] && mkdir ${OVPNPATH}
[ ! -d ${OSSLPATH} ] && mkdir ${OSSLPATH}
command opkg update || exit 1
# install openvpn
cd ${OVPNPATH}
tar xzf $(opkg download openvpn-openssl |grep Downloaded |cut -d\  -f4 |sed '$s/.$//')
tar xzf data.tar.gz
# delete unnecessary things (save space)
rm -f pkg.tar.gz data.tar.gz control.tar.gz debian-binary getopenvpn.sh
# install libopenssl
cd ${OSSLPATH}
tar xzf $(opkg download libopenssl |grep Downloaded |cut -d\  -f4 |sed '$s/.$//')
tar xzf data.tar.gz
# delete unnecessary things (save space)
rm -f control.tar.gz debian-binary data.tar.gz
}

start () {
# lvl 99 is not enough the script is too
sleep 10 # fast for the install step
install # setup openvpn and libssl
command openvpn --writepid /tmp/openvpn/ovpn.pid --daemon --config /etc/openvpn/client.conf
}

stop() {
PIDOF=$(ps |egrep openvpn |egrep  -v grep |awk '{print $1}')
kill ${PIDOF}
}

#REF : http://blog.ciberterminal.net/2013/06/18/openvpn-in-the-tp-link-wr841nd/
# opkg install kmod-tun
# opkg install liblzo
# opkg install libopenssl
# mkdir /etc/openvpn
#And import there your openvpn config files+certificates wathching any path reference 😛
#You’ll have to change the --config ciberterminal.conf inside my script with the name of your config file!
#Then create the init script:
# vi /etc/init.d/openvpn
#And give it permissions:
# chmod 755 /etc/init.d/openvpn
#You’ll be able to set it up in the Luci webUI as the rest of the services, or run it manually (for debugging), as always with:
# /etc/init.d/openvpn start
#Warning!
#This howto is not compatible with old versions of the WR841N[D] which only has 700kbs of rom.
#Warning!

#!/bin/sh /etc/rc.common
# Copyright (C) 2013 dodger@ciberterminal.net

START=99

start() {
local TMPPATH=/tmp/openvpn
[ ! -d ${TMPPATH} ] &amp;&amp; mkdir ${TMPPATH}
cd ${TMPPATH}
opkg update || exit 1
tar xzf $(opkg download openvpn | grep Downloaded | cut -d\  -f4 | sed '$s/.$//')
tar xzf data.tar.gz
rm -f pkg.tar.gz data.tar.gz control.tar.gz debian-binary getopenvpn.sh
${TMPPATH}/usr/sbin/openvpn  --writepid /tmp/ovpn_ciberterminal.pid --daemon --cd /etc/openvpn --config ciberterminal.conf
}

stop() {
PIDOF=$(ps | egrep openvpn | egrep  -v grep | awk '{print $1}')
kill ${PIDOF}
}

 

 

抄了這個SCRIPT試驗, https://blog.zauberstuhl.de/openwrt_tplink_openvpn/

結果完全沒動作, 然後花了3個小時, 學了一下 SHELL SCRIPT 的寫法和執行的方式, 參考這個 http://linux.vbird.org/linux_basic/0340bashshell-scripts.php#script,  做了一個 HELLO WORLD 試驗, 應該是OK的.

shell_script_test, ok
shell_script_test, ok

 

然後在用一些時間, 熟悉了一下很久沒用的 LINUX 指令

df -h, 顯示系統檔案和容量大小

df -f, show disk size
df -f, show disk size

 

在 OPENWRT 的系統底下, 若希望 OPENVPN CLIENT 運行, 要安裝以下的套件.

opkg install openvpn-openssl 
opkg install kmod-tun 
opkg install liblzo 
opkg install libopenssl

創建一個資料夾 /etc/openvpn, 把 OpenVPN Client 的證書檔案放進去, 證書檔案由管理員提供給使用者, 例如 client.ovpn

創建一個文字檔 /etc/init.d/openvpn, (因為放在/etc/init.d/ 裡面, 所以上電開機會自動執行), 以下SCRIPT內容寫到這個文字檔案裡面,

#### begin-of-script
#!/bin/sh  /etc/rc.common
START=99

. /etc/profile

install() {

local OVPNPATH=/tmp/openvpn
local OSSLPATH=/tmp/libopenssl
local LIBLZOPATH=/tmp/liblzo
local KMODTUNPATH=/tmp/kmod-tun

[ ! -d ${OVPNPATH} ] && mkdir ${OVPNPATH}
[ ! -d ${OSSLPATH} ] && mkdir ${OSSLPATH}
[ ! -d ${LIBLZOPATH} ] && mkdir ${LIBLZOPATH}
[ ! -d ${KMODTUNPATH} ] && mkdir ${KMODTUNPATH}

echo "----> opkg update, now"
command opkg update || exit 1
echo "----> opkg update is done"

# install openvpn
cd ${OVPNPATH}

echo "----> To download & install openvpn-openssl to RAM disk at ${OVPNPATH}"
tar xzf $(opkg download openvpn-openssl |grep Downloaded |cut -d\  -f4 |sed '$s/.$//')
tar xzf data.tar.gz
# delete unnecessary things (save space)
rm -f pkg.tar.gz data.tar.gz control.tar.gz debian-binary getopenvpn.sh

echo " "

# install libopenssl
cd ${OSSLPATH}
echo "----> To download & install libopenssl to RAM disk at ${OSSLPATH}"
tar xzf $(opkg download libopenssl |grep Downloaded |cut -d\  -f4 |sed '$s/.$//')
tar xzf data.tar.gz
# delete unnecessary things (save space)
rm -f control.tar.gz debian-binary data.tar.gz

echo " "

# install liblzo
cd ${LIBLZOPATH}
echo "----> To download & install liblzo to RAM disk at ${LIBLZOPATH}"
tar xzf $(opkg download liblzo |grep Downloaded |cut -d\  -f4 |sed '$s/.$//')
tar xzf data.tar.gz
# delete unnecessary things (save space)
rm -f control.tar.gz debian-binary data.tar.gz

#  echo " "

#  # install kmod-tun
#  cd ${KMODTUNPATH}
#  echo "----> To download & install liblzo to RAM disk at ${KMODTUNPATH}"
#  tar xzf $(opkg download kmod-tun |grep Downloaded |cut -d\  -f4 |sed '$s/.$//')
#  tar xzf data.tar.gz
# delete unnecessary things (save space)
#  rm -f control.tar.gz debian-binary data.tar.gz

echo " "

echo "----> done"
}

start () {
echo "REFERENCE : https://blog.zauberstuhl.de/openwrt_tplink_openvpn/"
echo " "
echo "modified for debug purpose, xiaolaba, 2016-MAR-20"
echo " "

# lvl 99 is not enough the script is too
sleep 10 # fast for the install step
install # setup openvpn and libssl and liblzo
#command openvpn --writepid /tmp/openvpn/ovpn.pid --daemon --config /etc/openvpn/client.conf
command openvpn --writepid /tmp/openvpn/ovpn.pid --daemon --config /etc/openvpn/my-client.ovpn
echo " "
echo "if you are asked user name and password here, it imply that openvpn is up and running, for debug purpose, xiaolaba, 2016-MAR-20"
}

stop() {
PIDOF=$(ps |egrep openvpn |egrep  -v grep |awk '{print $1}')
kill ${PIDOF}
}
#### end-of-script



然後執行指令,
chmod 755 /etc/init.d/openvpn
這樣系統才會知道這個SCRIPT文件是可執行檔案.


修改檔案 /etc/profile, 在最後加入兩行文字, (OPENVPN 安裝在RAM DISK 的引用位置, 隨版本改變),
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tmp/libopenssl/usr/lib:/tmp/liblzo/usr/lib 
export PATH=$PATH:/tmp/openvpn/usr/sbin


修改檔案 /etc/config/network, 在最後加入以下三行文字, 增加介面 VPN,
config interface 'VPN'
    option proto 'dhcp'
    option ifname 'tun0'


修改檔案 /etc/config/firewall, 在最後加入以下多行文字, LAN 資訊流通過VPN出去,
config zone
    option name 'VPN'
    option input 'REJECT'
    option forward 'REJECT'
    option output 'ACCEPT'
    option masq '1'
    option mtu_fix '1'
    option network 'VPN'
config forwarding
    option dest 'VPN'
    option src 'lan'


要手動測試這個劇本能否安裝 OPENVPN, 執行以下, 如果看到問你密碼帳號的畫面, 說明成功.
/etc/init.d/openvpn start


要手動關閉這個劇本, 執行以下,
/etc/init.d/openvpn stop


要直直接執行,
openvpn --cd /etc/openvpn --config /etc/openvpn/client.ovpn --remote 123.123.123.123 1179
或者,
openvpn --writepid /tmp/openvpn/ovpn.pid --daemon --config /etc/openvpn/my-client.ovpn

要看執行狀態執行ps, 會看到pid 和 openvpn 的對應.

開另外一個終端機, 執行ifconfig, 會看到tun0

要解除,
kill pid

openvpn done, TP-LiNK MR3020
openvpn done, TP-LiNK MR3020

REF:
https://www.loganmarchione.com/2014/10/openwrt-with-openvpn-client-on-tp-link-tl-mr3020/