Q006: 感覺 Asterisk 提供了很多模組,可以說說模組嗎?
我們可以說 Asterisk 是由模組建立起來的。一個模組是一個可裝載組件,它提供一個特定的功能,諸如信號通道驅動器(例如,chan_sip.so),或是允許連接到一個外部技術的資源(如func_odbc.so)。Asterisk 模組設定檔放在 /etc/asterisk/modules.conf 。
實際上是可以在啟動 Asterisk 的時候不載入任何模組,但在這種狀態下,將沒有能力做任何事情的(因為 Asterisk 是由模組組成的)。
話又說回來,當你以無模組的方式啟動 Asterisk 的話,是可以從控制台手動加載每個所需模組。但這不是你想要的產品方式,這種無模組的啟動方式通常用來做系統性能調整的用途,你想消除不需要的模組以達成特定的Asterisk的應用程序下才有用。
Asterisk 的模組分類如下:
• 應用程式
• 橋接模組
• 通話詳細記錄 (CDR)模組
• 通道事件記錄模組 (CEL)
• 通道驅動
• Codec 翻譯器
• Format 解譯器
• 撥號計劃功能
• PBX 模組
• 資源模組
• 加值模組
• 測試模組
因為內容太多了,後面會分別介紹上面的模組,而不是整合在一篇。
2016/01/26
Asterisk : The Cookbook 食譜 005 : 大不同
Q005: Aasterisk 與傳統電信交換站最大的不同在哪兒呢?
底下我們用圖來解讀比較直觀,從底下的圖也可以看出來為什麼 Asterisk 會以英文的『星號 * 』來命名。
因為電信的發展是歷史的演進,不同時代的電信設備通過不同的硬體架構互相交換訊息來達成彼此溝通。而 Asterisk 則是數位化的,對 Asterisk 而言,這些輸入輸出都以相同的角度去面對,換句話說,Asterisk 不具有中繼或站的內部概念。在Asterisk內部,一切進入或輸出系統的資訊都是通過某種渠道傳遞。Asterisk 有許多不同類型的通道,對Asterisk 而言這些通道的撥號都是用類似的方式處理。這意味著,例如,一個內部用戶可以在一個外部中繼(例如,手機)的端部存在,與在內線的端部的撥號方式都是用完全一樣的方式處理。
2016/01/25
Asterisk : The Cookbook 食譜 004 - 技術支援
Q004: 使用 Asterisk 會不會變成技術孤兒(得不到任何技術支援)?
採用Asterisk 的引人注目的優勢之一正是背後有著開發並支持它的充滿激情的網路社群。這個社群主要是以 Digium公司為首,這家公司非常清楚的Asterisk的文化意義,同時具有對未來的樂觀看法。
其中一個Asterisk社群更強大的邊際能量是它催生了電信,網絡和信息技術專業人士之間彼此熱誠的合作。在Asterisk 被普及化之前,這些領域裡的專業人士是彼此隔行如隔山的彼此各自走各自的路,甚至一直處於相互衝突、競爭的地位。在Asterisk社群裡,他們卻是互相喜歡對方的技術,而這些合作的意義不可低估。
Asterisk 社辭目前面臨的一個挑戰是新用戶的迅速湧入。現有社群的成員一般都是歡迎新成員的,但他們技術是持續不斷的往前走,誰能要求他們能不厭其煩的持續不斷的回答問題呢?所以每個人提出的問題,其答案往往只能自己獨立實驗來獲得自己的理解。前提是這些提問者願意花一些時間來研究和實驗。
很顯然,我們指的新用戶常常是不屬於任何特定類型的技術人員。雖然有些人會很樂意花時間試驗和閱讀各個在布落格上其他人的苦難經驗。也有很多人更是因為熱衷於簡單的解答而對這項技術的提問完全不感興趣。他們希望有一個簡單,直接,一步一步的指導,那將讓他們運行起來,然後描述實現常用功能(如語音信箱,自動話務員,等等)的最佳方法的一些明智的例子。嗯嗯,就是說,他們只想笨笨的照做,卻又不關心技術本身,然後遇到問題就又想直接找到解答照做,卻對問題的答案本身不願進行了解。
對專業社群中的成員,他們(正確地)覺察到Asterisk是像一個Web開發語言。對其他成員來說,這反而是沒有任何意義,很明顯,這樣的認知會讓人沉浸在欣賞Asterisk 微妙之處。但是人們總會要求一步一步的指導,卻無法期待 Asterisk像一個Web開發語言能提供他們解答。
很顯然,不可能有一種方法適合每個人。 Asterisk就像是一個全新的動物,需要一個完全不同的思維方式。當你探索社群,你會找到它包括許多不同的技術和不同的態度。
社群中的某些人對新進人員無法保有足夠的耐心,但是這往往是由於他們的熱情於研究,而不是因為他們不歡迎你的參與。意思就是說,如果你有問題,只要你有足夠的耐心,相信你一定也能找到有足夠耐心的人來幫你解答。
Mailing List: http://lists.digium.com
Wiki: http://wiki.asterisk.org
收集大量資訊的 Wiki, 有不少已經是歷史的塵埃,但是仍然值得一讀:
http://www.voip-info.org
IRC: irc.freenode.net/ 至少有兩個頻道 #asterisk and #asterisk-dev
採用Asterisk 的引人注目的優勢之一正是背後有著開發並支持它的充滿激情的網路社群。這個社群主要是以 Digium公司為首,這家公司非常清楚的Asterisk的文化意義,同時具有對未來的樂觀看法。
其中一個Asterisk社群更強大的邊際能量是它催生了電信,網絡和信息技術專業人士之間彼此熱誠的合作。在Asterisk 被普及化之前,這些領域裡的專業人士是彼此隔行如隔山的彼此各自走各自的路,甚至一直處於相互衝突、競爭的地位。在Asterisk社群裡,他們卻是互相喜歡對方的技術,而這些合作的意義不可低估。
Asterisk 社辭目前面臨的一個挑戰是新用戶的迅速湧入。現有社群的成員一般都是歡迎新成員的,但他們技術是持續不斷的往前走,誰能要求他們能不厭其煩的持續不斷的回答問題呢?所以每個人提出的問題,其答案往往只能自己獨立實驗來獲得自己的理解。前提是這些提問者願意花一些時間來研究和實驗。
很顯然,我們指的新用戶常常是不屬於任何特定類型的技術人員。雖然有些人會很樂意花時間試驗和閱讀各個在布落格上其他人的苦難經驗。也有很多人更是因為熱衷於簡單的解答而對這項技術的提問完全不感興趣。他們希望有一個簡單,直接,一步一步的指導,那將讓他們運行起來,然後描述實現常用功能(如語音信箱,自動話務員,等等)的最佳方法的一些明智的例子。嗯嗯,就是說,他們只想笨笨的照做,卻又不關心技術本身,然後遇到問題就又想直接找到解答照做,卻對問題的答案本身不願進行了解。
對專業社群中的成員,他們(正確地)覺察到Asterisk是像一個Web開發語言。對其他成員來說,這反而是沒有任何意義,很明顯,這樣的認知會讓人沉浸在欣賞Asterisk 微妙之處。但是人們總會要求一步一步的指導,卻無法期待 Asterisk像一個Web開發語言能提供他們解答。
很顯然,不可能有一種方法適合每個人。 Asterisk就像是一個全新的動物,需要一個完全不同的思維方式。當你探索社群,你會找到它包括許多不同的技術和不同的態度。
社群中的某些人對新進人員無法保有足夠的耐心,但是這往往是由於他們的熱情於研究,而不是因為他們不歡迎你的參與。意思就是說,如果你有問題,只要你有足夠的耐心,相信你一定也能找到有足夠耐心的人來幫你解答。
Mailing List: http://lists.digium.com
Wiki: http://wiki.asterisk.org
收集大量資訊的 Wiki, 有不少已經是歷史的塵埃,但是仍然值得一讀:
http://www.voip-info.org
IRC: irc.freenode.net/ 至少有兩個頻道 #asterisk and #asterisk-dev
Asterisk : The Cookbook 食譜 003 - 功能摘要
Q003: Asterisk 會不會太簡單了?我想做轉接、視訊會議、多方通話...
Asterisk 是專業的,而且我們也相信實際上也沒有任何一家電信廠商可以不計任何代價滿足大家的需求。對 Asterisk 而言,這些都是可以做到的,只要您付出些時間閱讀本系統食譜。
我們也相信,世界上已經有相當多的電信商其實背後是採用 Asterisk 來提供各種豐富的服務,而這些是那些沒有採用 Asterisk 的電信商做不到的。
底下我就不翻譯,直接列出幾個(其實是一大堆)Asterisk 能夠提供的電信服務:
Asterisk 是專業的,而且我們也相信實際上也沒有任何一家電信廠商可以不計任何代價滿足大家的需求。對 Asterisk 而言,這些都是可以做到的,只要您付出些時間閱讀本系統食譜。
我們也相信,世界上已經有相當多的電信商其實背後是採用 Asterisk 來提供各種豐富的服務,而這些是那些沒有採用 Asterisk 的電信商做不到的。
底下我就不翻譯,直接列出幾個(其實是一大堆)Asterisk 能夠提供的電信服務:
- Call Features
- ADSI On-Screen Menu System
- Alarm Receiver
- Append Message
- Authentication
- Automated Attendant
- Blacklists
- Blind Transfer
- Call Detail Records
- Call Forward on Busy
- Call Forward on No Answer
- Call Forward Variable
- Call Monitoring
- Call Parking
- Call Queuing
- Call Recording
- Call Retrieval
- Call Routing (DID & ANI)
- Call Snooping
- Call Transfer
- Call Waiting
- Caller ID
- Caller ID Blocking
- Caller ID on Call Waiting
- Calling Cards
- Conference Bridging
- Database Store / Retrieve
- Database Integration
- Dial by Name
- Direct Inward System Access
- Distinctive Ring
- Distributed Universal Number Discovery (DUNDi™)
- Do Not Disturb
- E911
- ENUM
- Fax Transmit and Receive
- Flexible Extension Logic
- Interactive Directory Listing
- Interactive Voice Response (IVR)
- Local and Remote Call Agents
- Macros
- Music On Hold
- Music On Transfer:
- Flexible Mp3-based System
- Random or Linear Play
- Volume Control
- Privacy
- Open Settlement Protocol (OSP)
- Overhead Paging
- Protocol Conversion
- Remote Call Pickup
- Remote Office Support
- Roaming Extensions
- Route by Caller ID
- SMS Messaging
- Spell / Say
- Streaming Hold Music
- Supervised Transfer
- Talk Detection
- Text-to-Speech (via Festival)
- Three-way Calling
- Time and Date
- Transcoding
- Trunking
- VoIP Gateways
- Zapateller
- Voicemail:
- Visual Indicator for Message Waiting
- Stutter Dialtone for Message Waiting
- Voicemail to email
- Voicemail Groups
- Web Voicemail Interface
- Computer-Telephony Integration
- Asterisk Gateway Interface (AGI)
- Asterisk Manager Interface (AMI)
- Asterisk REST Interface (ARI)
- Outbound Call Spooling
- Scalability
- TDMoE (Time Division Multiplex over Ethernet)
- Allows direct connection of Asterisk PBX
- Zero latency
- Uses commodity Ethernet hardware
- Voice-over IP
- Allows for integration of physically separate installations
- Uses commonly deployed data connections
- Allows a unified dialplan across multiple offices
- Speech
- Cepstral TTS
- Lumenvox ASR
- Codecs
- ADPCM
- CELT (pass through)
- G.711 (A-Law & μ-Law)
- G.719 (pass through)
- G.722
- G.722.1 licensed from Polycom®
- G.722.1 Annex C licensed from Polycom®
- G.723.1 (pass through)
- G.726
- G.729a
- GSM
- iLBC
- Linear
- LPC-10
- Speex
- SILK
- VoIP Protocols
- Google Talk
- H.323
- IAX™ (Inter-Asterisk eXchange)
- Jingle/XMPP
- MGCP (Media Gateway Control Protocol
- SCCP (Cisco® Skinny®)
- SIP (Session Initiation Protocol)
- UNIStim
- Traditional Telephony Protocols
- E&M
- E&M Wink
- Feature Group D
- FXS
- FXO
- GR-303
- Loopstart
- Groundstart
- Kewlstart
- MF and DTMF support
- Robbed-bit Signaling (RBS) Types
- MFC-R2 (Not supported. However, a patch is available)
- ISDN Protocols
- AT&T 4ESS
- EuroISDN PRI and BRI
- Lucent 5ESS
- National ISDN 1
- National ISDN 2
- NFAS
- Nortel DMS100
- Q.SIG
Asterisk : The Cookbook 食譜 002 - Safe
Q002: 使用 Asterisk 安全嗎?
Asterisk 可以說是駭客的電信局。不要誤解駭客的意思,我們可以聲稱是因為駭客的存在才有網際網路,這是個複雜的故事,在此只是想要向那些在背後默默付出的技術人員致敬。不要害怕這個詞,因為有這些駭客的存在,我們的網際網路才有可能更加安全的可能性(否則我們每個人都會被那些大公司賣了還幫他們數錢)。Asterisk 是安全的,也是彈性的,主要就是因為有大量的駭客人員參與開發。是的,也因此我才能在這邊聲稱我們可以自行架設免費的電信局端。
Asterisk : The Cookbook 食譜 001 - what
首先聲明:
安裝環境主要是針對 Ubuntu, 包括 15.10-Desktop, 14.04.3-server。
不過我的電腦都不是乾淨的,所以安裝時相依套件可能會因為您的電腦而有變化,如果有問題請提出。
Q: Asterisk 是什麼?
Asterisk 是用來實作 VoIP 交換機的軟體堆疊,我相信它能縮小傳統電話和網絡電話的差距,讓您能夠輕鬆自行架設電信局端。
我們似乎已經忘記了,電話的目的是為了讓人們進行交流。這是一個簡單的目標,通過網際網路照理應該相當容易實現這個目標,但是為什麼我們仍然必須付高昂的費用來打電話呢?當年的 Skype 真正要落實打電話仍然必須付費用,而且普及率仍然無法在台灣落實,這其中的原因是什麼呢?我只能說,軟體技術是相當低的,這系列的文章主要就是說明這件事。
Asterisk 從 1999 就以開放源碼的型式出發,到目前為止,它整合了 Zapata 技術專案,Zapata 技術專案的整合讓 Asterisk 能夠提供公共交換電話網(PSTN)接口,使得軟體 VoIP 可以跟實體電信局端對接。意思就是透過 Asterisk 您就可以有機會撥打遠洋國際電話,也可以實際打到朋友的手機。當然這中間若有與其他電信局端對接的話,仍然要付電信費用。話又說回來,如果您與朋友都能透過 VoIP 對話的方式就可以享受無費用的通話囉。
安裝環境主要是針對 Ubuntu, 包括 15.10-Desktop, 14.04.3-server。
不過我的電腦都不是乾淨的,所以安裝時相依套件可能會因為您的電腦而有變化,如果有問題請提出。
Q: Asterisk 是什麼?
Asterisk 是用來實作 VoIP 交換機的軟體堆疊,我相信它能縮小傳統電話和網絡電話的差距,讓您能夠輕鬆自行架設電信局端。
我們似乎已經忘記了,電話的目的是為了讓人們進行交流。這是一個簡單的目標,通過網際網路照理應該相當容易實現這個目標,但是為什麼我們仍然必須付高昂的費用來打電話呢?當年的 Skype 真正要落實打電話仍然必須付費用,而且普及率仍然無法在台灣落實,這其中的原因是什麼呢?我只能說,軟體技術是相當低的,這系列的文章主要就是說明這件事。
Asterisk 從 1999 就以開放源碼的型式出發,到目前為止,它整合了 Zapata 技術專案,Zapata 技術專案的整合讓 Asterisk 能夠提供公共交換電話網(PSTN)接口,使得軟體 VoIP 可以跟實體電信局端對接。意思就是透過 Asterisk 您就可以有機會撥打遠洋國際電話,也可以實際打到朋友的手機。當然這中間若有與其他電信局端對接的話,仍然要付電信費用。話又說回來,如果您與朋友都能透過 VoIP 對話的方式就可以享受無費用的通話囉。
2015/12/09
反組譯 decompile/disassemble android apk
好久沒寫文章了,來補一下。
之前針對 C/C++ 寫了一篇
http://wadefs.blogspot.tw/2012/01/cc-disassembly.html
底下是我隨手亂寫的一點東西,當作關鍵字來看就好,懶得整理
https://github.com/pxb1988/dex2jar
http://sourceforge.net/projects/dex2jar/
a) Convert the code to a modifiable format.
d2j-dex2jar.sh -f -o test_apk-debug_dex2jar.jar test_apk-debug.apk
d2j-asm-verify.sh test_apk-debug_dex2jar.jar
d2j-jar2jasmin.sh -f -o test_apk_jasmin test_apk-debug_dex2jar.jar
b) edit test_apk_jasmin/a/b/Main.j
c) repack apk
d2j-jasmin2jar.sh -f -o test_apk_jasmin.jar test_apk_jasmin/
d2j-asm-verify.sh test_apk_jasmin.jar
d2j-jar2dex.sh -f -o classes.dex test_apk_jasmin.jar
cp test_apk-debug.apk test_apk-debug-toast.apk
zip -r test_apk-debug-toast.apk classes.dex
d2j-apk-sign.sh -f -o test_apk-debug-toast-signed.apk test_apk-debug-toast.apk
1. 反編譯Apk得到Java源代碼
dex2jar.bat classes.dex <-- apk="" classes.dex.dex2jar.jar="" p="">2. 上面產生的 jar 檔,透過 jd-gui 來讀原碼
jd-gui classes.dex.dex2jar.jar
3. 若要修改資源(如要漢化)
apktool d -f [apk文件 ] [輸出文件夾]
4. 將上面輸出文件夾編譯成 apk
apktool b [輸出文件夾]
baksmali -a 15 -x mediatek-framework.odex -d framework -o mediatek-framework
解開 AndroidManifest.xml:
apktool d HelloWorld.apk ./HelloWorld
-->
之前針對 C/C++ 寫了一篇
http://wadefs.blogspot.tw/2012/01/cc-disassembly.html
底下是我隨手亂寫的一點東西,當作關鍵字來看就好,懶得整理
https://github.com/pxb1988/dex2jar
http://sourceforge.net/projects/dex2jar/
a) Convert the code to a modifiable format.
d2j-dex2jar.sh -f -o test_apk-debug_dex2jar.jar test_apk-debug.apk
d2j-asm-verify.sh test_apk-debug_dex2jar.jar
d2j-jar2jasmin.sh -f -o test_apk_jasmin test_apk-debug_dex2jar.jar
b) edit test_apk_jasmin/a/b/Main.j
c) repack apk
d2j-jasmin2jar.sh -f -o test_apk_jasmin.jar test_apk_jasmin/
d2j-asm-verify.sh test_apk_jasmin.jar
d2j-jar2dex.sh -f -o classes.dex test_apk_jasmin.jar
cp test_apk-debug.apk test_apk-debug-toast.apk
zip -r test_apk-debug-toast.apk classes.dex
d2j-apk-sign.sh -f -o test_apk-debug-toast-signed.apk test_apk-debug-toast.apk
1. 反編譯Apk得到Java源代碼
dex2jar.bat classes.dex <-- apk="" classes.dex.dex2jar.jar="" p="">2. 上面產生的 jar 檔,透過 jd-gui 來讀原碼
jd-gui classes.dex.dex2jar.jar
3. 若要修改資源(如要漢化)
apktool d -f [apk文件 ] [輸出文件夾]
4. 將上面輸出文件夾編譯成 apk
apktool b [輸出文件夾]
baksmali -a 15 -x mediatek-framework.odex -d framework -o mediatek-framework
解開 AndroidManifest.xml:
apktool d HelloWorld.apk ./HelloWorld
2014/12/10
mount partitions from disk dd image 掛載影像檔中的 硬碟分割區
假設,有一顆硬碟,利用 ddrescue 或 dd 做出一個 disk.dd
想要掛載它的話,可以利用 mount -o loop,offset=xxx 這樣的語法來掛載
比較麻煩的是要計算它的位移量,我在早前的文章有提到計算方法,
底下是利用 kpartx 來對應:
$ sudo kpartx -v -a disk.dd
add map loop0p1 (252:0): 0 204800 linear /dev/loop0 2048
add map loop0p2 (252:1): 0 180807680 linear /dev/loop0 206848
add map loop0p3 (252:2): 0 2 linear /dev/loop0 181016574
add map loop0p5 : 0 37748047 linear /dev/loop0 181016576
add map loop0p6 : 0 138412110 linear /dev/loop0 218767360
add map loop0p7 : 0 643033776 linear /dev/loop0 357181440
用完之後通常就要拔除或是 卸載,你會發現光 umount 還不夠,
必須再利用 kpartx 來解除影像檔的對應
$ sudo kpartx -v -d disk.dd
想要掛載它的話,可以利用 mount -o loop,offset=xxx 這樣的語法來掛載
比較麻煩的是要計算它的位移量,我在早前的文章有提到計算方法,
底下是利用 kpartx 來對應:
$ sudo kpartx -v -a disk.dd
add map loop0p1 (252:0): 0 204800 linear /dev/loop0 2048
add map loop0p2 (252:1): 0 180807680 linear /dev/loop0 206848
add map loop0p3 (252:2): 0 2 linear /dev/loop0 181016574
add map loop0p5 : 0 37748047 linear /dev/loop0 181016576
add map loop0p6 : 0 138412110 linear /dev/loop0 218767360
add map loop0p7 : 0 643033776 linear /dev/loop0 357181440
接下來就可以掛載它了,都不必計算
$ sudo mount /dev/mapper/loop0p5 /tmp/5 -o ro
後面的 -o ro 是掛載成唯讀的,視自己的需求決定要不要加
用完之後通常就要拔除或是 卸載,你會發現光 umount 還不夠,
必須再利用 kpartx 來解除影像檔的對應
$ sudo kpartx -v -d disk.dd
批次處理照片
有一批照片要旋轉90度,原名稱副檔名是大寫,處理後也想順便改成小寫,語法如下,必須安裝 imagemagick 套件:
for i in `ls *JPG`; do F=${i%%.JPG}; convert $F.JPG -rotate 90 $F-v1.jpg; done
其他如放大縮小也是可以查閱 convert 指令取得
for i in `ls *JPG`; do F=${i%%.JPG}; convert $F.JPG -rotate 90 $F-v1.jpg; done
其他如放大縮小也是可以查閱 convert 指令取得
2014/11/17
2014/08/19
簡繁轉換 iconv, cconv, opencc,
這篇文章整理並比較了幾個簡繁轉換的工具
我拿來試了下 xml 檔的轉換,iconv 確實一直存在著字元集問題,使用 cconv 就沒有這個問題,語法範例如下:
for i in *xml; do echo $i; cconv -f UTF8-TW -t UTF8-CN -o out/$i $i; done
可以很簡單的將 utf8 的繁體轉換成 utf8 的簡體
等效的 iconv 大致如下:
for i in *xml; do echo $i; iconv -f utf8 -t big5 $i | iconv -f big5 -t gb2312 | iconv -f gb2312 -t utf8 -o out/${i}; done
iconv 除了不直接外,還無法轉換 BOM xml file, 有些字元也會出錯
可惜的是,我不會使用 opencc....不知道怎麼從繁體轉成簡體
我拿來試了下 xml 檔的轉換,iconv 確實一直存在著字元集問題,使用 cconv 就沒有這個問題,語法範例如下:
for i in *xml; do echo $i; cconv -f UTF8-TW -t UTF8-CN -o out/$i $i; done
可以很簡單的將 utf8 的繁體轉換成 utf8 的簡體
等效的 iconv 大致如下:
for i in *xml; do echo $i; iconv -f utf8 -t big5 $i | iconv -f big5 -t gb2312 | iconv -f gb2312 -t utf8 -o out/${i}; done
iconv 除了不直接外,還無法轉換 BOM xml file, 有些字元也會出錯
可惜的是,我不會使用 opencc....不知道怎麼從繁體轉成簡體
2014/08/04
ubuntu 如何重新啟動 usb?
我的筆電怪怪的,有時開機后,一開始還可以用 usb, 例如 usb mouse, 可是開完機不久它就失效了,重新拔插也沒有用
老實講我不知道是什麼原因造成的,但是底下的方法可以讓它重新啟動:
for u in uhci_hcd xhci_hcd; do
for i in $( ls /sys/bus/pci/drivers/$u/ | grep : ); do
echo -n "unbind $u... ";echo $i | sudo tee /sys/bus/pci/drivers/$u/unbind;
echo -n "bind.. $u... ";echo $i | sudo tee /sys/bus/pci/drivers/$u/bind;
done
done
老實講我不知道是什麼原因造成的,但是底下的方法可以讓它重新啟動:
for u in uhci_hcd xhci_hcd; do
for i in $( ls /sys/bus/pci/drivers/$u/ | grep : ); do
echo -n "unbind $u... ";echo $i | sudo tee /sys/bus/pci/drivers/$u/unbind;
echo -n "bind.. $u... ";echo $i | sudo tee /sys/bus/pci/drivers/$u/bind;
done
done
同樣道理,如果想重新啟動其他裝置也可以比照辦理。
其他相關的指令如:
lspci
lsusb
lshw
其他相關的指令如:
lspci
lsusb
lshw
2014/05/19
ubuntu ffmpeg 不見了,替代方案?
太久沒用了,竟然突然找不到 ffmpeg, 連套件都沒了。
其實啊,用 avconv, 算是完整的替代方案,語法基本差不多,而且更簡潔,例如,不必再指定格式。
譬如原來的語法 ffmpeg -i $1 -ss $2 -t $3 -f image2 $4
現在只需要 avconv -i $1 -ss $2 -t $3 $4
甚至,可以直接從 m4v 切割一段,直接輸出成 mp3
avconv -i $1 -ss $2 -t $3 $4.mp3
其他我就不多說了喔,好用啊!
其實啊,用 avconv, 算是完整的替代方案,語法基本差不多,而且更簡潔,例如,不必再指定格式。
譬如原來的語法 ffmpeg -i $1 -ss $2 -t $3 -f image2 $4
現在只需要 avconv -i $1 -ss $2 -t $3 $4
甚至,可以直接從 m4v 切割一段,直接輸出成 mp3
avconv -i $1 -ss $2 -t $3 $4.mp3
其他我就不多說了喔,好用啊!
2014/04/16
android-x86 調整 data.img 大小
預設是 512M, 說真的是小了點,若要大一點的話,當然在安裝時請不要用預設的 512, 可以改用 8192 之類的
但是若已經安裝好的話呢?是有 windows 工具,這邊要講的是 ubuntu 下的工具, 怎樣不破壞原來的資料讓它變大呢?
三個動作:
# 先修復檔案系統的錯誤
$ e2fsck -fyc /media/wade/DATA/data.img
# 因為原來有 512M, 加上 7.5G, 也就是 7680 * 1M 就會變成 8G
$ dd if=/dev/zero of=/media/wade/DATA/data.img oflag=append conv=notrunc bs=1M count=7680
# 再來就是 resize...
$ resize2fs /media/wade/DATA/data.img
但是若已經安裝好的話呢?是有 windows 工具,這邊要講的是 ubuntu 下的工具, 怎樣不破壞原來的資料讓它變大呢?
三個動作:
# 先修復檔案系統的錯誤
$ e2fsck -fyc /media/wade/DATA/data.img
# 因為原來有 512M, 加上 7.5G, 也就是 7680 * 1M 就會變成 8G
$ dd if=/dev/zero of=/media/wade/DATA/data.img oflag=append conv=notrunc bs=1M count=7680
# 再來就是 resize...
$ resize2fs /media/wade/DATA/data.img
2014/04/09
ubuntu 更新後,選單/工具列 不見了
可以試試底下三種方法(擇一):
一、
$ sudo dpkg-reconfigure unity
$ sudo dpkg --configure -a
二、
$ dconf reset -f /org/compiz/
$ unity --reset-icons &disown
三、
$ sudo apt-get install compizconfig-settings-manager
$ export DISPLAY=:0
$ ccsm
一、
$ sudo dpkg-reconfigure unity
$ sudo dpkg --configure -a
二、
$ dconf reset -f /org/compiz/
$ unity --reset-icons &disown
三、
$ sudo apt-get install compizconfig-settings-manager
$ export DISPLAY=:0
$ ccsm
install adobe air on ubuntu 64
請參考這兒 http://www.tkalin.com/blog_posts/installing-adobe-air-and-elance-tracker-on-ubuntu-13-10-saucy-salamander-64-bit
$ sudo apt-get install libxt6:i386 libnspr4-0d:i386 libgtk2.0-0:i386 libstdc++6:i386 libnss3-1d:i386 lib32nss-mdns libxml2:i386 libxslt1.1:i386 libcanberra-gtk-module:i386 gtk2-engines-murrine:i386
$ sudo apt-get install libgnome-keyring0:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/libgnome-keyring.so.0 /usr/lib/libgnome-keyring.so.0
$ sudo ln -s /usr/lib/i386-linux-gnu/libgnome-keyring.so.0.2.0 /usr/lib/libgnome-keyring.so.0.2.0
接下來就是去 adobe 下載來安裝,就不寫了
$ sudo apt-get install libxt6:i386 libnspr4-0d:i386 libgtk2.0-0:i386 libstdc++6:i386 libnss3-1d:i386 lib32nss-mdns libxml2:i386 libxslt1.1:i386 libcanberra-gtk-module:i386 gtk2-engines-murrine:i386
$ sudo apt-get install libgnome-keyring0:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/libgnome-keyring.so.0 /usr/lib/libgnome-keyring.so.0
$ sudo ln -s /usr/lib/i386-linux-gnu/libgnome-keyring.so.0.2.0 /usr/lib/libgnome-keyring.so.0.2.0
接下來就是去 adobe 下載來安裝,就不寫了
2014/03/21
哇,好快
新北市因為某些原因,不肯付錢給微軟,因此採購電腦時,不再使用微軟,而是採用 ezGO, 並要求學校開課教授 ezGO, 我想,這也算是我身邊發生的第一起微軟敗退案。當然,我知道很多熱心人士致力推廣自由軟體,至少,浪潮已經湧到我身邊來了。
言歸正傳,小羊小肯早就知道多重開機,早就知道 ubuntu, 也聽我念了很多次微軟怎樣怎樣不好,現在終於正式要學 ezGO 了,剛開學那陣子非常興奮,我就做了隨身碟開機給他們,結果一直到昨天,小羊才正式跟老師提,老師還真的說「你可以用隨身碟開機」,我都很懷疑他這個美術老師兼課的電腦老師到底懂不懂隨身碟開機啊!
其實,小羊小肯愛上 ezGO 是因為,上面有一個賽車遊戲,剛開學那週就看到了,隔週終於在課堂上玩,回家就很努力要玩,也因此更加遵守媽媽的約定,總之就是變更乖了。因為之前都是用媽媽的筆電,就算隨身碟開機很慢,但是他們沒感覺,原因就是跟學校比起來快多了。我在猜,學校的新電腦不應該比我家的慢,想必是學校是因為怕每次上課前要還原電腦麻煩,採用雲端安裝的方式吧,我猜。剛剛上網體驗了下,果然雲端啊!
小羊小肯在上了幾次課後,老是抱怨學校的開機很慢,平常在家,都是哥哥先拿我的筆電開機去玩, 話說這款賽車遊戲叫 supertuxkart, 我的 ubuntu 當然也可以安裝,但是他們喜歡用自己的帳號,喜歡用 ezGO, 所以才有先前的幾篇文章。總之,我的筆電現在可以讓他們用自己的隨身碟開機,也可以用我電腦裡的 ezGO iso 開機,也燒了光碟給他們光碟開機,當然也有 ezGO 硬碟版本的開機,花樣百出。昨天,小肯終於第一次用我的電腦「關機」,結果他發出驚嘆的口氣說,『哇,關機好快喔』。
話說,這款 supertuxkart 支援搖桿,我還特地去買了兩支,不知道這樣可不可以取代 WII? 想必還是差很遠吧,但是至少目前他們是真的玩的超開心的啊!
言歸正傳,小羊小肯早就知道多重開機,早就知道 ubuntu, 也聽我念了很多次微軟怎樣怎樣不好,現在終於正式要學 ezGO 了,剛開學那陣子非常興奮,我就做了隨身碟開機給他們,結果一直到昨天,小羊才正式跟老師提,老師還真的說「你可以用隨身碟開機」,我都很懷疑他這個美術老師兼課的電腦老師到底懂不懂隨身碟開機啊!
其實,小羊小肯愛上 ezGO 是因為,上面有一個賽車遊戲,剛開學那週就看到了,隔週終於在課堂上玩,回家就很努力要玩,也因此更加遵守媽媽的約定,總之就是變更乖了。因為之前都是用媽媽的筆電,就算隨身碟開機很慢,但是他們沒感覺,原因就是跟學校比起來快多了。我在猜,學校的新電腦不應該比我家的慢,想必是學校是因為怕每次上課前要還原電腦麻煩,採用雲端安裝的方式吧,我猜。剛剛上網體驗了下,果然雲端啊!
小羊小肯在上了幾次課後,老是抱怨學校的開機很慢,平常在家,都是哥哥先拿我的筆電開機去玩, 話說這款賽車遊戲叫 supertuxkart, 我的 ubuntu 當然也可以安裝,但是他們喜歡用自己的帳號,喜歡用 ezGO, 所以才有先前的幾篇文章。總之,我的筆電現在可以讓他們用自己的隨身碟開機,也可以用我電腦裡的 ezGO iso 開機,也燒了光碟給他們光碟開機,當然也有 ezGO 硬碟版本的開機,花樣百出。昨天,小肯終於第一次用我的電腦「關機」,結果他發出驚嘆的口氣說,『哇,關機好快喔』。
話說,這款 supertuxkart 支援搖桿,我還特地去買了兩支,不知道這樣可不可以取代 WII? 想必還是差很遠吧,但是至少目前他們是真的玩的超開心的啊!
2014/03/14
淺談虛擬機、多重開機、多重編譯環境
好像上一篇也是相關文章?
最近需要 windows, ubuntu, 各種版本的 ubuntu, ezGO....
之前我是做在一支 8G usb disk 中含有 ubuntu, GeeXboX, tiny linux,....
最近因為需要 windows, 所以用虛擬機,譬如用 vmware player for ubuntu, 或是 virtualbox....
後來又需要 ezGO, 這個超肥的 kubuntu
工作上又需要舊版的 ubuntu 來保證編譯 各種晶片的 Android, (TI, MTK, BCM...),這個有的輕易就整合在同一個開發環境中,有的沒辦法
所以啦,也是以虛擬機的方式存在。當然,我的筆電算是相當高檔就是了。
還有一種方法,就是切割多個硬碟分割區,只是不見得有辦法做到這一點,或是拿 usb 3.0 的外接 usb disk, 只是這樣的速度怎麼也快不起來,效能或許也不輸虛擬機,但是虛擬機的好處是可以多個工作環境同時存在。
有一個非常古老的方法,叫做 chroot / debootstrap ....這邊不多說,有興趣的可以上網查。
chroot 不會像虛擬機那樣占用虛擬機的資源,環境也可以自行切開,相當好用。而且硬碟空間也少非常非常多。這邊只提醒一下:
在 chroot 之前,我是這樣下命令:
cd $CHROOT_DIR
for i in dev proc srv sys tmp dev/pts ; do echo $i;sudo mount --bind /$i $i; done
chroot . /bin/bash
不用的時候,重開機是個方法,不然就是反過來 umount
當然,若要非 debian/ubuntu 的系統,還是得虛擬機或多重開機囉!
最近需要 windows, ubuntu, 各種版本的 ubuntu, ezGO....
之前我是做在一支 8G usb disk 中含有 ubuntu, GeeXboX, tiny linux,....
最近因為需要 windows, 所以用虛擬機,譬如用 vmware player for ubuntu, 或是 virtualbox....
後來又需要 ezGO, 這個超肥的 kubuntu
工作上又需要舊版的 ubuntu 來保證編譯 各種晶片的 Android, (TI, MTK, BCM...),這個有的輕易就整合在同一個開發環境中,有的沒辦法
所以啦,也是以虛擬機的方式存在。當然,我的筆電算是相當高檔就是了。
還有一種方法,就是切割多個硬碟分割區,只是不見得有辦法做到這一點,或是拿 usb 3.0 的外接 usb disk, 只是這樣的速度怎麼也快不起來,效能或許也不輸虛擬機,但是虛擬機的好處是可以多個工作環境同時存在。
有一個非常古老的方法,叫做 chroot / debootstrap ....這邊不多說,有興趣的可以上網查。
chroot 不會像虛擬機那樣占用虛擬機的資源,環境也可以自行切開,相當好用。而且硬碟空間也少非常非常多。這邊只提醒一下:
在 chroot 之前,我是這樣下命令:
cd $CHROOT_DIR
for i in dev proc srv sys tmp dev/pts ; do echo $i;sudo mount --bind /$i $i; done
chroot . /bin/bash
不用的時候,重開機是個方法,不然就是反過來 umount
當然,若要非 debian/ubuntu 的系統,還是得虛擬機或多重開機囉!
2014/03/04
各種虛擬機的檔案轉換
轉自 http://blog.sleeplessbeastie.eu/2012/04/29/virtualbox-convert-raw-image-to-vdi-and-otherwise/
VirtualBox - convert RAW image to VDI and otherwise
Posted on April, 29 2012 by milosz
VirtualBox command-line interface (VBoxManage) provides an easy way to convert raw disk image to the VDI/VMDK format and otherwise.
Let's assume that we have raw image of the sdb device:
$ sudo dd if=/dev/sdb of=./sdb.raw
To use it with VirtualBox we need to convert it to the VDI format:
$ VBoxManage convertdd sdb.raw sdb.vdi --format VDI
To use it with VMware we need to convert it to the VMDK format:
$ VBoxManage convertdd sdb.raw sdb.vmdk --format VMDK
Convert between VDI/VMDK formats:
$ VBoxManage clonehd sdb.vdi sdb.vmdk --format VMDK
$ VBoxManage clonehd sdb.vmdk sdb.vdi --format VDI
Convert to the RAW image:
$ VBoxManage clonehd sdb.vdi sdb.raw --format RAW
Alternative solution to get back raw image after applying modifications is to use qemu-img command from qemu package:
$ qemu-img convert -f vmdk sdb.vmdk -O raw sdb.raw
Now we can write image to the device:
$ sudo dd if=./sdb.raw of=/dev/sdb
2013/10/18
backup newer files
在編譯 browser, kernel, 或 android 時,會產生非常多的輸出,如果要把這些輸出檔備份下來,一個最簡單的方法是 tar --newer REF_DATE_OR_FILE -cf BACKUP.tar
也就是建立一個參考的日期或檔案,然後找出比它新的將之 tar 起來
另外,若想得到這個清單,當然也可以在 tar 完後再用 tar -t 來取得。不過若不想建立 tar 檔時怎麼處理?底下是一個 shell-script,
$ cat list-file-timestamp
#!/bin/bash
EXE=$0
EXE=${EXE##*/}
DIR=$1
[ "x$DIR" = "x" ] && DIR='.'
[ ! -d $DIR ] && DIR='.'
FORMAT=$2
[ -f BUILD-DATE ] && BUILD_DATE=BUILD-DATE
[ "x$BUILD_DATE" = "x" ] && [ -f checkenv.log ] && BUILD_DATE=checkenv.log
[ "x$BUILD_DATE" = "x" ] && [ -f ./out/target/product/pandora_g2_check-dep.log ] && BUILD_DATE=./out/target/product/pandora_g2_check-dep.log
[ "x$FORMAT" = "x" ] && FORMAT='+'
OUT=/tmp/${EXE}.lst
echo "EXE=$EXE, OUTPUT=$OUT, DIR=$DIR FORMAT=$FORMAT"
find $DIR -type f -newer $BUILD_DATE -printf "%T${FORMAT} %p\n" | sort -n -r > $OUT
用法也相當簡單:
$ list-file-timestamp
$ list-file-timestamp out
$ list-file-timestamp out @
第二個範例是指定目錄,預設是 $PWD,也就是 .
第三個是指定輸出的日期 format, 請 man find 來查,在 -printf format 項下,預設是+
用 tar 的缺點當然就是耗時耗磁碟
可是如果已經透過上面的 list-file-timestamp 建立檔案清單了,該怎樣將它備份呢?最簡單的想法是:
$ tar cf BACKUP.tar `cat LIST_FILE`
通常會因檔案太多,無法使用上面的命令,這時候可以考慮用 xargs
$ cat LIST_FILE | xargs tar uf BACKUP.tar
不過,老實講, tar 相當慢,還可以用下面的方法:
$ cat LIST_FILE | xargs -I % cp --parents % ../BACK_DIR
上面 xargs -I % 是用來指定傳給 xargs 的參數,因為預設這個參數會加在命令的最後
而 cp --parents 則是保留目錄結構
也就是建立一個參考的日期或檔案,然後找出比它新的將之 tar 起來
另外,若想得到這個清單,當然也可以在 tar 完後再用 tar -t 來取得。不過若不想建立 tar 檔時怎麼處理?底下是一個 shell-script,
$ cat list-file-timestamp
#!/bin/bash
EXE=$0
EXE=${EXE##*/}
DIR=$1
[ "x$DIR" = "x" ] && DIR='.'
[ ! -d $DIR ] && DIR='.'
FORMAT=$2
[ -f BUILD-DATE ] && BUILD_DATE=BUILD-DATE
[ "x$BUILD_DATE" = "x" ] && [ -f checkenv.log ] && BUILD_DATE=checkenv.log
[ "x$BUILD_DATE" = "x" ] && [ -f ./out/target/product/pandora_g2_check-dep.log ] && BUILD_DATE=./out/target/product/pandora_g2_check-dep.log
[ "x$FORMAT" = "x" ] && FORMAT='+'
OUT=/tmp/${EXE}.lst
echo "EXE=$EXE, OUTPUT=$OUT, DIR=$DIR FORMAT=$FORMAT"
find $DIR -type f -newer $BUILD_DATE -printf "%T${FORMAT} %p\n" | sort -n -r > $OUT
用法也相當簡單:
$ list-file-timestamp
$ list-file-timestamp out
$ list-file-timestamp out @
第二個範例是指定目錄,預設是 $PWD,也就是 .
第三個是指定輸出的日期 format, 請 man find 來查,在 -printf format 項下,預設是
用 tar 的缺點當然就是耗時耗磁碟
可是如果已經透過上面的 list-file-timestamp 建立檔案清單了,該怎樣將它備份呢?最簡單的想法是:
$ tar cf BACKUP.tar `cat LIST_FILE`
通常會因檔案太多,無法使用上面的命令,這時候可以考慮用 xargs
$ cat LIST_FILE | xargs tar uf BACKUP.tar
不過,老實講, tar 相當慢,還可以用下面的方法:
$ cat LIST_FILE | xargs -I % cp --parents % ../BACK_DIR
上面 xargs -I % 是用來指定傳給 xargs 的參數,因為預設這個參數會加在命令的最後
而 cp --parents 則是保留目錄結構
訂閱:
文章 (Atom)
