2014年10月30日 星期四

hdparm 硬碟速度測試



sudo apt-get install hdparm

sudo hdparm -Tt /dev/sdX


Timing cached reads:   3164 MB in  2.00 seconds = 1582.31 MB/sec
Timing buffered disk reads: 238 MB in  3.01 seconds =  79.08 MB/sec

2014年10月29日 星期三

WinSetupFromUSB 製作 USB 重灌碟


WinSetupFromUSB 是一套可以製作多系統 USB 安裝碟的工具,
該軟體內整合了數個我們製做重灌開機碟工具,包含:
FBinstTool、Bootice、RMPrepUSB、Grub4dos、Imdisk…等等,
它可以建立開機引導程式 GRUB ,
最重要的是可以直接載入 .iso 映像檔,來做開機碟。

官網:
http://www.winsetupfromusb.com/

官方載點:
WinSetupFromUSB 1.4.exe
WinSetupFromUSB 1.4.7z

接下來進入正式筆記教學,
下面的各個軟體都是網路開放的免軟體,
可以直接 Google 搜尋下載,
同時本站的雲端也有備份,也可以直接從本站下載。

一、規劃開機選單
以本作者所使用的為例,我希望設計如下:

  1. Windows 7 整合版 9 in 1 容量約 4.18 GB
  2. Windows 8.1 容量約 3.60 GB
  3. Debian-7.7.0_amd64 容量約 635  MB
  4. Ubuntu-12.04.04_amd64 容量約 733  MB
  5. CentOS-7.0_amd64 _livecd 容量約 687  MB
  6. Reboot 
  7. Shutdown
合計所需容量約: 9.835 GB 


二、準備東西



三、使用軟體 WinSetupFromUSB_1.4
本作者是使用 64 位元 Windows 7 作業系統的機器下使用。



四、植入檔案

開啟 USB 隨身碟,先建立一個 ISO 目錄,
接著無順序,植入:

/menu.list
/unifont.hex.gz
/ISO/CentOS-7.0_amd64_livecd.iso
/ISO/Debian-7.7.0_amd64.iso
/ISO/Ubuntu-12.04.4_amd64.iso
/ISO/Windows_8.1.iso


五、調整 menu.list




六、QEMU 測試開機







Debug 1:
進入選單後,執行安裝 Windows 8.1 ,出現:


Sol 1:
這可能是 QEMU 虛擬機,設定給的 RAM 不足,可以試試給 1024 MB (或更多) 再開看看。


Debug 2:

Sol 2: 未解決
參考:http://fireball-catcher.blogspot.tw/2012/07/grub4dos.html
用 imdisk 嘗試解決,又出現新的問題:
「缺少數位簽章或是惡意軟體」







Reference:
http://www.coolpc.com.tw/phpBB2/viewtopic.php?f=21&t=53402

http://fireball-catcher.blogspot.tw/2012/07/grub4dos.html

http://520.be/1496-%E5%88%A9%E7%94%A8grub4dos%E8%A3%BD%E4%BD%9Cusb%E9%96%8B%E6%A9%9F%E7%A2%9F.html#lightbox[gallery-DY9l]/6/

http://skynimo.lionfree.net/joomla/index.php?option=com_content&view=category&layout=blog&id=17&Itemid=101&limitstart=15

2014年10月28日 星期二

建立虛擬 SD Card



目標是建立一個 1GB 的 sdcard.img ,其分割區如下圖:



一、先建一個空的 sdcard.img (User 權限)

(其中 bs 是 block size)
dd if=/dev/zero of=sdcard.img bs=1G count=1

查看一下檔案屬性:
file sdcard.img
hexdump sdcard.img

會發現都是 0 組成的空檔案。

二、連接到 /dev/loop0 (Root 權限)

losetup /dev/loop0 sdcard.img

三、磁區分割 (Root 權限)

fdisk 指令參考
sudo fdisk /dev/loop0
n
p
1
[enter]
+80M

n
p
2
[enter]
[enter]
t
1
b

p
w

四、做 Offset (Root 權限)

fdisk -lu /dev/loop0
查看分割,輸出如下:
所用裝置 開機      開始         結束      區塊   識別號  系統
/dev/loop0p1            2048      165887       81920    b  W95 FAT32
/dev/loop0p2          165888     2097151      965632   83  Linux

losetup -o `expr 512 \* 2048` /dev/loop1  /dev/loop0
losetup -o `expr 512 \* 165888` /dev/loop2 /dev/loop0

查看連接結果,輸出如下:
losetup -a
/dev/loop0: [0804]:9701359 (/home/lin/qemu/sdcard.img)
/dev/loop1: [0005]:1218 (/dev/loop0),偏移值 1048576
/dev/loop2: [0005]:1218 (/dev/loop0),偏移值 84934656

五、格式化 (Root 權限)

先裝 filesystem tools
apt-get install dosfstools

fdisk -lu /dev/loop0
查看分割,輸出如下:
所用裝置 開機      開始         結束      區塊   識別號  系統
/dev/loop0p1            2048      165887       81920    b  W95 FAT32
/dev/loop0p2          165888     2097151      965632   83  Linux

開始格式化記得如入 blocks:
mkfs.vfat /dev/loop1 81920
mkfs.ext4 /dev/loop2 965632

看一下 block id ,如下:
blkid /dev/loop1 
/dev/loop1: SEC_TYPE="msdos" UUID="3A38-5A24" TYPE="vfat"
blkid /dev/loop2
/dev/loop2: UUID="dec7a9d5-b0bb-433b-aefb-6b4eecc28aba" TYPE="ext4"

Debug 1: 
如果找不到 mkfs.vfat 的指令

解決 1:
sudo apt-get install dosfstools

七、掛載  (Root 權限)

先建立要掛的目錄
mkdir  /sd1 /sd2

掛載
mount /dev/loop1 /sd1
mount /dev/loop2 /sd2

查看掛載
df -h

八、清除全部(Root 權限)

先卸載
umount /sd1
umount /sd2
df -h

解除連接(注意由下到上)
losetup -a
losetup -d /dev/loop2
losetup -d /dev/loop1
losetup -d /dev/loop0
losetup -a

九、連接及掛載(Root 權限)

  (可以8. 及 9. 反覆練習)
losetup /dev/loop0 sdcard.img
losetup -o `expr 512 * 2048` /dev/loop1
losetup -o `expr 512 * 165888` /dev/loop2
losetup -a

mount /dev/loop1 /sd1
mount /dev/loop2 /sd2
df -h

十、產生檔案

1. bootloader 可參考文章:u-boot 編譯
產生檔案:
MLO
u-boot
u-boot.bin
u-boot.img

2. kernel 可參考文章:編譯 ARM Linux 核心
產生檔案:
uImage
modules

3. Rootfs 可以參考文章:建立 Rootfs
瘦身過後的 Rootfs 全部檔案,
還需要含有步驟 2. 所編譯出來的核心 modules 

4. uEnv.txt 可參考文章:U-Boot 指令及建立 uEnv.txt
uEnv.txt        -> 開機設定檔

十一、分割區整理

sdcard1 -> 

第 1 個分割區,FAT 16/32 格式,有打開開機旗標,
內含檔案:
-rwxr-xr-x 1 root root   45128 2012-10-30 22:19 MLO
-rwxr-xr-x 1 root root 1215711 2012-10-30 22:19 u-boot
-rwxr-xr-x 1 root root  294672 2012-10-30 22:19 u-boot.bin
-rwxr-xr-x 1 root root  294736 2012-10-30 22:19 u-boot.img
-rwxr-xr-x 1 root root       1 2012-10-30 23:29 uEnv.txt
-rwxr-xr-x 1 root root 2475616 2012-10-30 22:15 uImage

sdcard2 -> 

第 2 個分割區,ext4 格式,
內含 rootfs 一些能正常開機執行的檔案,
還包含我們做好的核心 modules

十二、測試 sdcard.img

qemu-system-arm -M beagle -m 512 -nographic -sd sdcard.img








Reference:
http://pominglee.blogspot.tw/2012/10/sd-card.html

2014年10月24日 星期五

OCCT 燒機軟體



OCCT 燒機軟體,常用於測試電腦穩定度,
有玩超頻者的必備工具。

官網:
http://www.ocbase.com/

下載:
OCCTPT4.4.1.zip (免安裝版)
OCCTPT4.4.1.exe (安裝版 )


介面如下圖:


介面右側「Monitoring」可以查看下圖數據:


常用的燒機模式:POWER SUPPLY
可以全機燒機,包含 CPU、GPU、Memory... 等。







2014年10月23日 星期四

快速格式化工具

假設需要格式化的分割區為 /dev/sdb1,

  • HPFS/NTFS/exFAT

我們一般的 Linux 下格式化 NTFS 檔案系統格式,
常用的指令有:
mkfs -t ntfs /dev/sdb1
mkfs.ntfs /dev/sdb1

接下來推薦,NTFS 的快速格式化工具 ntfsprogs
sudo apt-get install ntfsprogs
mkntfs -f /dev/sdb1


  • EXT4

快速格式化要加 -T largefile 參數:
mkfs.ext4  -T largefile  /dev/sdb1










OpenHardwareMonitor 系統監測工具



Open Hardware Monitor 可用於監測系統資訊、溫度,
如:CPU、顯卡、記憶體…等。


官網:
http://openhardwaremonitor.org/

載點:
openhardwaremonitor-v0.6.0-beta.zip


可以自行設定( View -> 勾選 Show Gadget ),加到桌面顯示,如下圖:


設定開機啟動及長駐:





2014年10月22日 星期三

用 iconv 將檔案轉換格式(BIG5 ←→ UTF-8) 


因為Big-5的檔案,看都會有亂碼,


所以就可以用

iconv

來將Big-5格式的檔案,


直接轉成UTF-8的格式。

(1) Big-5 To UTF-8


 

       
iconv -f big5 -t utf-8 big5.txt -o utf8.txt


(2) UTF-8 To Big-5


        
iconv -f utf-8 -t big5 utf8.txt -o big5.txt


MobaXterm 遠端連線工具



推薦軟體 MobaXterm
可以於 Windows 7 下,遠端連線至 SSH Server ,
且免 X Loader 直接支援圖形視窗複製文字

相似的軟體 PuTTY ,但是只裝 PuTTY 還要另裝 X Loader 。

官網:
MobaXterm

載點:
MobaXterm v7.3 (installer 安裝版)
MobaXterm v7.3 (portable edition 免安裝版)



開啟介面如下圖:


點選 Session 設定連線服務,支援相當多遠端方式:


點選在 Linux 最常用的 SSH,並直接打入要連的 IP (user 可以不用填):


從左側選單的 PuTTY sessions 可以選到所加的 IP。








安裝 QEMU Linaro 完整版

1. 修改鏡像站

先準備 Debian backports 鏡像站,後面安裝工具會需要:
sudo vi /etc/apt/sources.list

加入下面這行:
deb http://ftp.tw.debian.org/debian wheezy-backports main

下一步請更新套件
sudo apt-get update && apt-get upgrade

2. 下載 QEMU-Linaro

至 qemu-linaro 官方下載其檔案:
官方位置: https://launchpad.net/qemu-linaro
載點: qemu-linaro-1.7.0-2014.01.tar.gz

下載完後解壓縮,並進去 ./configure
tar xfva qemu-linaro-1.7.0-2014.01.tar.gz
cd qemu-linaro-1.7.0-2014.01/
 ./configure

可能遇到以下 ERROR:

問題1:
ERROR: pixman not present. Your options:
         (1) Preferred: Install the pixman devel package (any recent
             distro should have packages as Xorg needs pixman too).
         (2) Fetch the pixman submodule, using:
             git submodule update --init pixman
解決1:
sudo apt-get install libseccomp-dev

問題2:
ERROR: DTC not present. Your options:
         (1) Preferred: Install the DTC devel package
         (2) Fetch the DTC submodule, using:
             git submodule update --init dtc
解決2:
sudo apt-get install -y libfdt-dev

成功後可以看到 ./configure 的內容後,
但是大多的功能都是 support no,
接下來要讓它們變 yes ,進行完整化。


3. 要安裝以下套件

libnss3-dev
libudev-dev
libpng12-dev
libghc6-zlib-dev
libogg-dev
libglobus-openssl-dev
libxrandr-dev
libxfixes-dev
libjpeg8-dev
libsasl2-dev
libiscsi-dev
librbd-dev
xfslibs-dev
libbrlapi-dev
libbluetooth-dev
libxen-dev
libvte-dev
libseccomp-dev
python-pyparsing

sudo apt-get install libnss3-dev libudev-dev libpng12-dev libghc6-zlib-dev libogg-dev libglobus-openssl-dev libxrandr-dev libxfixes-dev libjpeg8-dev libsasl2-dev libiscsi-dev librbd-dev xfslibs-dev libbrlapi-dev libbluetooth-dev libxen-dev libvte-dev libseccomp-dev python-pyparsing

接下來處理幾個比較麻煩的套件,
可以查看  qemu-linaro-1.7.0-2014.01/ 目錄下的 configure 內容,
vi configure

輸入關鍵字(例如 spice),可以找到所缺少的套件。

spice support 要讓這個功能需要裝有
 --atleast-version=0.12.0 spice-server  (至少 0.12.0 版以上)
--atleast-version=0.12.3 spice-protocol (至少 0.12.3 版以上)

我們要到 spice 官方,下載,安裝如下面步驟:

4. 安裝 spice-0.12.5 

(如有遇到問題,解決方法在下面)
下載 spice-0.12.5.tar.bz2

tar xfva spice-0.12.5.tar.bz2
cd spice-0.12.5/

這邊的設定要多加 smartcard 開啟
./configure --enable-smartcard

會看到輸出:
Spice 0.12.5
        ==============
        prefix:                   /usr/local
        c compiler:               gcc -std=gnu99
        c++ compiler:             g++
        python:                   /usr/bin/python2
        Build Spice client:       no
        Smartcard:                yes
        SASL support:             yes
        Automated tests:          no
        Manual:                   no
        Now type 'make' to build spice

才接著編譯及安裝:
make -j ${core number}
sudo make install


裝 spice 問題一 (如果沒有就跳過此步驟)
Alternatively, you may set the environment variables CELT051_CFLAGS
and CELT051_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

因為 spice-0.12.5 只接受 CELT 051 版。

解決:
下載 celt-0.5.1.3.tar.gz
tar xfva celt-0.5.1.3.tar.gz
cd celt-0.5.1.3/
./configure
make  -j ${core number}
sudo make install

裝 spice 問題二 (如果沒有就跳過此步驟)
checking for pyparsing python module... not found
configure: error: pyparsing python module is required to compile this package
解決:
sudo apt-get install python-pyparsing

裝 spice 問題三 (如果沒有就跳過此步驟)
checking sasl/sasl.h usability... no
checking sasl/sasl.h presence... no
checking for sasl/sasl.h... no
checking for sasl_client_init in -lsasl2... no
checking for sasl_client_init in -lsasl... no
configure: error: Missing required Cyrus SASL development package
解決:
sudo apt-get install libsasl2-dev


裝 spice 問題四 (如果沒有就跳過此步驟)
checking for SMARTCARD... no
configure: error: Package requirements (libcacard >= 0.1.2) were not met:
No package 'libcacard' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix.
Alternatively, you may set the environment variables SMARTCARD_CFLAGS
and SMARTCARD_LIBS to avoid the need to call pkg-config.
解決:
下載 libcacard-0.1.2.tar.bz2
tar xfva libcacard-0.1.2.tar.bz2
cd  libcacard-0.1.2/
./configure
make -j ${core number}
sudo make install

承上面問題,裝 libcacard 問題 (如果沒有就跳過此步驟)
checking for NSS... no
configure: error: Package requirements (nss) were not met:
No package 'nss' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix.
Alternatively, you may set the environment variables NSS_CFLAGS
and NSS_LIBS to avoid the need to call pkg-config.
解決:
sudo apt-get install libnss3-dev


5. 安裝 spice-protocol-0.12.7

下載 spice-protocol-0.12.7.tar.bz2
tar xfva spice-protocol-0.12.7.tar.bz2
cd spice-protocol-0.12.7/
./configure
make -j ${core number}
sudo make install


6. 安裝 libusb-1.0.1

下載 libusb-1.0.19/libusb-1.0.19.tar.bz2
tar xfva libusb-1.0.19.tar.bz2
cd libusb-1.0.19/
./configure
make -j ${core number}
sudo make install


7. 安裝 usbredir-0.7

下載 usbredir-0.7.tar.bz2
tar xfva usbredir-0.7.tar.bz2
cd usbredir-0.7/
./configure
make -j ${core number}
sudo make install


8. 再回到(步驟 2.)  裝 qemu-linaro

cd qemu-linaro-1.7.0-2014.01/
./configure
內容如下:
tcg debug enabled no
gprof enabled     no
sparse enabled    no
strip binaries    yes
profiler          no
static build      no
-Werror enabled   no
pixman            system
SDL support       yes
GTK support       yes
curses support    yes
curl support      yes
mingw32 support   no
Audio drivers     oss
Block whitelist (rw)
Block whitelist (ro)
VirtFS support    yes
VNC support       yes
VNC TLS support   yes
VNC SASL support  yes
VNC JPEG support  yes
VNC PNG support   yes
VNC WS support    yes
xen support       yes
brlapi support    yes
bluez  support    yes
Documentation     yes
GUEST_BASE        yes
PIE               yes
vde support       yes
Linux AIO support yes
ATTR/XATTR support yes
Install blobs     yes
KVM support       yes
RDMA support      yes
TCG interpreter   no
fdt support       yes
preadv support    yes
fdatasync         yes
madvise           yes
posix_madvise     yes
sigev_thread_id   yes
uuid support      yes
libcap-ng support yes
vhost-net support yes
vhost-scsi support yes
Trace backend     nop
Trace output file trace-
spice support     yes (0.12.7/0.12.5)
rbd support       yes
xfsctl support    yes
nss used          yes
libusb            yes
usb net redir     yes
GLX support       yes
libiscsi support  yes
build guest agent yes
QGA VSS support   no
seccomp support   yes
coroutine backend ucontext
coroutine pool    yes
GlusterFS support no
virtio-blk-data-plane yes
gcov              gcov
gcov enabled      no
TPM support       no
libssh2 support   yes
TPM passthrough   no
QOM debugging     yes
vhdx              yes
接著編譯:
make -j ${core number}
安裝:
sudo make install


9. 重整 qemu 檔案路徑

安裝完後可能出現檔案路徑問題,請執行:
ldconfig


10. 查看版本

qemu-system-arm -version
QEMU emulator version 1.7.0 (qemu-linaro 2014.01), Copyright (c) 2003-2008 Fabrice Bellard

qemu-system-arm -M ?
Supported machines are:
none                 empty machine
beagle               Beagle board (OMAP3530)
beaglexm             Beagle board XM (OMAP3630)
collie               Collie PDA (SA-1110)
nuri                 Samsung NURI board (Exynos4210)
smdkc210             Samsung SMDKC210 board (Exynos4210)
connex               Gumstix Connex (PXA255)
verdex               Gumstix Verdex (PXA270)
highbank             Calxeda Highbank (ECX-1000)
midway               Calxeda Midway (ECX-2000)
integratorcp         ARM Integrator/CP (ARM926EJ-S) (default)
kzm                  ARM KZM Emulation Baseboard (ARM1136)
mainstone            Mainstone II (PXA27x)
musicpal             Marvell 88w8618 / MusicPal (ARM926EJ-S)
n800                 Nokia N800 tablet aka. RX-34 (OMAP2420)
n810                 Nokia N810 tablet aka. RX-44 (OMAP2420)
n900                 Nokia N900 (OMAP3)
sx1                  Siemens SX1 (OMAP310) V2
sx1-v1               Siemens SX1 (OMAP310) V1
overo                Gumstix Overo board (OMAP3530)
cheetah              Palm Tungsten|E aka. Cheetah PDA (OMAP310)
realview-eb          ARM RealView Emulation Baseboard (ARM926EJ-S)
realview-eb-mpcore   ARM RealView Emulation Baseboard (ARM11MPCore)
realview-pb-a8       ARM RealView Platform Baseboard for Cortex-A8
realview-pbx-a9      ARM RealView Platform Baseboard Explore for Cortex-A9
akita                Akita PDA (PXA270)
spitz                Spitz PDA (PXA270)
borzoi               Borzoi PDA (PXA270)
terrier              Terrier PDA (PXA270)
lm3s811evb           Stellaris LM3S811EVB
lm3s6965evb          Stellaris LM3S6965EVB
tosa                 Tosa PDA (PXA255)
versatilepb          ARM Versatile/PB (ARM926EJ-S)
versatileab          ARM Versatile/AB (ARM926EJ-S)
vexpress-a9          ARM Versatile Express for Cortex-A9
vexpress-a15         ARM Versatile Express for Cortex-A15
xilinx-zynq-a9       Xilinx Zynq Platform Baseboard for Cortex-A9
z2                   Zipit Z2 (PXA27x)





其他 QEMU Bug 排除,參考文章:Bridge 建立橋接網路(QEMU Debug) 下方內容。

Reference:
http://pominglee.blogspot.tw/2014/06/linaro-qemu.html


2014年10月14日 星期二

用 QEMU 來開機 arm.img


1. 查看 .img 

查看一下我們做好的 image 檔案:
file arm.img
hexdump arm.img

再做一個空的 arm_test.img 測試 & 比較:
dd if=/dev/zero of=arm_test.img bs=1G count=2
file arm_test.img
hexdump arm_test.img

然後會發現, arm.img 裡頭有很多東西,但 arm_test.img 就是一個空的data。

2. 練習運算指令:expr

加法: expr 5 + 2
減法: expr 5 - 2
乘法: expr 5 \* 2
除法: expr 5 / 2

只有乘法比較特別,因為 * 是萬用特殊字元。

3. 對 image 檔案做連接,指令:losetup

到 ~/qemu_image 目錄下,需要 superUser
cd ~/qemu_image
su

查看連接狀況:
losetup -a

將 /dev/loop0 連接 arm.img:
losetup /dev/loop0 arm.img


4. 做磁區偏移(一樣 ROOT 下)

fdisk -lu /dev/loop0
所用裝置 開機      開始         結束      區塊   識別號  系統
/dev/loop0p1            2048     3913727     1955840   83  Linux
/dev/loop0p2         3915774     4192255      138241    5  延伸
/dev/loop0p5         3915776     4192255      138240   82  Linux 交換區/ Solaris

其中 /dev/loop0p1 的開始(0ffset)為 2048,我們需要修正 512 * 2048 個 sector:
losetup -o `expr 512 \* 2048` /dev/loop1 /dev/loop0


5. 核心檔案擷取

掛載:
sudo mount /dev/loop1 /mnt

複製核心檔案(這邊要一般 User)
cd /mnt/boot
cp vmlinuz-3.2.0-4-versatile ~/qemu_image
cp initrd.img-3.2.0-4-versatile ~/qemu_image

6. 用 QEMU 來做 arm.img 開機

我們先做一個 Shell Script:
vi runarm.sh

# !/bin/bash
#
# Run arm.img

qemu-system-arm -M versatilepb -m 512 \
-kernel ~qemu_image/vmlinuz-3.2.0-4-versatile \
-initrd ~qemu_image/initrd.img-3.2.0-4-versatile \
-hda ~qemu_image/arm.img \
-append "root=/dev/sda1" &

執行 runarm.sh
sh runarm.sh

7. 進入 QEMU - arm.img

開機以後,在QEMU中查看一下核心,證明我們是用 ARM 核心開機
cat /proc/cpuinfo

接下來套件更新
sudo apt-get update && apt-get upgrade -y

安裝 X-Window 套件
sudo apt-get install icewm xorg

清除套件,省空間
apt-get clean

進入圖形介面
startx

裝瀏灠器及 http 伺服器測試
sudo apt-get install iceweasel apache2
iceweasel &
網址列: localhost
可以看到 網頁 work 中...

關機
sudo halt





Reference:
http://pominglee.blogspot.tw/2013/11/qemu-arm.html



2014年10月12日 星期日

半自動備份檔案

這是我寫來備份一些辛苦調好的設定檔跟重要資料用。

說明:使用需要 ROOT 權限,需要裝有 xz-utils 套件,
要使用需要修改幾個地方: 

09 USER = 這邊改你自己的一般使用者帳號。

10 SAVE_AS = 要先建立好要存放備份檔的地方,
我個人是放 /bak_dir 下,再上傳到雲端空間。


最後是註解圍起來的地方「Backup List」,請自訂你想要備份的檔案、目錄。
vi Backup_data.sh
#!/bin/bash
# 2014/06/24 KLin
# Backup My data.

# parameter setting
TIME=`date +"%Y%m%d"`

# Use Setting
USER=youUsserName
SAVE_AS=/bak_dir

BAK_DIR=backup_$TIME
BAK_TARGET=$SAVE_AS/$BAK_DIR

# check account
if [ ! `whoami` == root ];then
        echo "Permision Deny, you're no root."
        exit 0
fi

# check directory
if [ -e "$BAK_TARGET.tar.xz" ];then
        echo "Directory exist!" 
        exit 0
fi

# build directory
mkdir $BAK_TARGET
mkdir -p $BAK_TARGET/root_dir
mkdir -p $BAK_TARGET/${USER}_dir

##############################################################
## Backup List
# system backup list
rsync -av /etc $BAK_TARGET/root_dir

# root backup list
rsync -av /root/.bashrc $BAK_TARGET/root_dir
rsync -av /root/.vimrc $BAK_TARGET/root_dir
rsync -av /root/* $BAK_TARGET/root_dir

# user backup list
rsync -av /home/$USER/.bashrc $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/.conkyrc $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/.vimrc $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/.xinitrc $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/.asoundrc $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/bin $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/images $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/Notes $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/Other_work $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/sdl $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/Script $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/Eclipse $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/Java $BAK_TARGET/${USER}_dir
#rsync -av /home/$USER/driver $BAK_TARGET/${USER}_dir
##############################################################

# compress
cd $SAVE_AS;tar -c --xz -f $BAK_DIR.tar.xz $BAK_DIR

# remove dir
rm -r $BAK_TARGET

# permision change
chown $USER:$USER $BAK_TARGET.tar.xz


最後加入可執行權限,放到執行檔目錄下:
chmod a+x Backup_data.sh
mv Backup_data.sh /usr/local/bin/

使用方法,直接下 Backup_data.sh 指令。






2014年10月11日 星期六

DHCP Server

可以自建 Bridge ,並設一個虛擬網段,能給虛擬機使用,
讓虛擬機自動抓到 ip 。
(以下皆需要 ROOT )

1. 安裝
sudo apt-get -y install isc-dhcp-server


2.建立虛擬網段
可以參考 Bridge 建立橋接網路 來建立!

3. 設定 dhcpd.conf
vi /etc/dhcp/dhcpd.conf

subnet 192.168.9.0 netmask 255.255.255.0{
        range 192.168.9.51 192.168.9.100;
        option subnet-mask 255.255.255.0;
        option broadcast-address 192.168.9.255;
        option routers 192.168.9.1;
        option domain-name-servers 120.117.2.1;
        next-server 192.168.9.254;
        filename "pxelinux.0";


4. 重啟 DHCP 服務
/etc/init.d/isc-dhcp-server restart
update-rc.d isc-dhcp-server defaults






CentOS 7 綁定網卡設定


由於 CentOS 並不會自動產生 /etc/udev/rules.d/70-persistent-net.rules 這個檔案,所以有時候網卡資訊會跑掉,並產生新的 interface,這對常常更換電腦練習或上課的人非常困擾。

除了解決網卡亂跳的問題外,建立這個檔案還有一個好處,就是可以將網卡改為自己好辨認的名字。

首先請先確認你網卡的 Mac 碼 ,也就是網卡的身份證,指令如下(以enp5s0為例):
[root@localhost ~]# ifconfig enp5s0
enp5s0: flags=4163  mtu 1500
        inet 120.117.73.XX  netmask 255.255.255.0  broadcast 120.117.73.255
        inet6 fe80::22cf:30ff:fe30:7273  prefixlen 64  scopeid 0x20
        ether 20:cf:30:30:72:XX  txqueuelen 0  (Ethernet)
        RX packets 42382  bytes 25199666 (24.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17379  bytes 2544252 (2.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

接下來建立 70-persistent-net.rules 檔案:
[root@localhost ~]# vim /etc/udev/rules.d/70-persistent-net.rules 
[root@localhost ~]# cat /etc/udev/rules.d/70-persistent-net.rules 
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?", ATTR{address}=="20:cf:30:30:72:73", ATTR{type}=="1", KERNEL=="eth", NAME="eth1"
#SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?", ATTR{address}=="10:c3:7b:45:7e:70", ATTR{type}=="1", KERNEL=="eth", NAME="eth0"

註解的部份是我在 p503  所用的網卡,所以到p503練習的時候,記得也要將網卡資訊寫入才不會抓到錯的網卡。

再來更改 interface 的設定檔:
[root@localhost ~]# mv /etc/sysconfig/network-scripts/ifcfg-enp5s0 /etc/sysconfig/network-scripts/ifcfg-eth1
[root@localhost ~]# sed -i 's/enp5s0/eth1/g' /etc/sysconfig/network-scripts/ifcfg-eth1
[root@localhost ~]# echo "HWADDR=20:cf:30:30:72:XX" >> /etc/sysconfig/network-scripts/ifcfg-eth1

# reboot 

重新開好機後再 ifconfig 看看網卡有沒有綁定成功





CentOS 7 yum 使用&鏡像站設定

與 Debian 不同,CentOS 安裝(更新)套件的指令如下:
# yum install [套件名]
# yum remove [套件名]
# yum update [套件名]
# yum update (全部套件)
存放 repo 設定檔在 /etc/yum.repo.d/ 的目錄下。

到設定檔的目錄並觀看裡面有哪些檔案:
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ll
total 16
-rw-r--r--. 1 root root 1664 Aug 23 00:21 CentOS-Base.repo
-rw-r--r--. 1 root root  649 Aug 23 00:21 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 1331 Aug 23 00:21 CentOS-Sources.repo
-rw-r--r--. 1 root root  156 Aug 23 00:21 CentOS-Vault.repo
這些是安裝好系統後內建的設定檔,我們可以注意到鏡像站的設定檔都是 .repo 結尾的
所以在建立我們自己的設定檔時,要記得命名的規則,不然 yum 是不會抓到設定檔的。

再來介紹一下設定檔的語法:

[名字]
name=同上即可  
baseurl=鏡像站路徑
enabled=將這個鏡像站清單打開
gpgcheck=不使用gpg key


接下來請建立一個 old 資料夾把舊的檔案丟進去,指令如下:
[root@localhost yum.repos.d]# mkdir old
[root@localhost yum.repos.d]# mv CentOS-* old/

鏡像站我建議使用國家高速網路( twaren )的 ftp 站:

ftp://ftp.twaren.net/Linux/CentOS/7/os/x86_64/
ftp://ftp.twaren.net/Linux/CentOS/7/updates/x86_64/

在上述兩個路徑中,都會找的一個叫做 repodata 的資料夾,repo檔的路徑必須指到這個檔案才能抓到套件清單。


建立新的 repo 檔:

[root@localhost yum.repos.d]# vim mybase.repo myupdate.repo
兩個檔案的內容如下:
1. mybase.repo
[root@localhost yum.repos.d]# cat mybase.repo 
[mybase]
name=mybase
baseurl=ftp://ftp.twaren.net/Linux/CentOS/7/os/x86_64/
enabled=1
gpgcheck=0
2. myupdate.repo
[root@localhost yum.repos.d]# cat myupdate.repo 
[myupdate]
name=myupdate
baseurl=ftp://ftp.twaren.net/Linux/CentOS/7/updates/x86_64/
enabled=1
gpgcheck=0
最後請下下面的指令來確認更新是否成功:
[root@localhost yum.repos.d]# yum clean all
Loaded plugins: fastestmirror, langpacks
Cleaning repos: base extras google-chrome mybase myupdate updates
Cleaning up everything
Cleaning up list of fastest mirrors
[root@localhost yum.repos.d]# yum update
Loaded plugins: fastestmirror, langpacks
base                                                     | 3.6 kB     00:00     
extras                                                   | 3.4 kB     00:00     
google-chrome                                            |  951 B     00:00     
mybase                                                   | 3.6 kB     00:00     
myupdate                                                 | 3.4 kB     00:00     
updates                                                  | 3.4 kB     00:00     
base/7/x86_64/primary_db       FAILED                                          
http://ftp.twaren.net/Linux/CentOS/7.0.1406/os/x86_64/repodata/efa521576f53587de26616ea1e45f902993abcd9d67e707b8993b5f29bd15956-primary.sqlite.bz2: [Errno 14] HTTP Error 403 - Forbidden
Trying other mirror.
(1/7): base/7/x86_64/group_gz                              | 157 kB   00:00     
(2/7): extras/7/x86_64/primary_db                          |  26 kB   00:00     
(3/7): base/7/x86_64/primary_db                            | 4.9 MB   00:00     
(4/7): updates/7/x86_64/primary_db                         | 3.6 MB   00:00     
(5/7): mybase/group_gz                                     | 157 kB   00:01     
(6/7): myupdate/primary_db                                 | 3.6 MB   00:02     
(7/7): mybase/primary_db                                   | 4.9 MB   00:02     
google-chrome/primary                                      | 1.9 kB   00:00     
Determining fastest mirrors
 * base: ftp.stust.edu.tw
 * extras: ftp.stust.edu.tw
 * updates: ftp.stust.edu.tw
google-chrome                                                               3/3
No packages marked for update

ssh 遠端連線「安全性」

ssh 是一個遠端連線服務,但連上網路後,
有可能會有相當的資安風險,因此要多幾道防禦手續。

1. 安裝 ssh server。
sudo apt-get update && apt-get install ssh


2. 測試遠端連線
(-X 是支援 X11,可遠端開圖形介面程式)。
ssh -Xl Account IP
ssh -X Account@IP

舉例:
Account : userA
IP: 192.168.1.2

ssh -Xl userA 192.168.1.2
ssh -X userA@192.168.1.2
-------------------------------------------------------------------------
安全性1. 拒絕遠端直接登入 Root。
一般而言,我們使用 Root 之前,會先登入一般 User,
再用 su 指令來進入 SuperUser 權限;而拒絕 ssh 直接連 root ,意思是要遠端取得 root 權限,需要有兩組密碼才行!
(當然 root 跟一般 user 密碼要不同。)
vi /etc/ssh/sshd_config

將 「PermitRootLogin」關閉,設 no

/etc/init.d/ssh restart

詳細參考 鳥哥-簡易 Telnet 與 SSH 主機設定

安全性2. ssh 黑名單套件。
當有人嚐試遠端登入,並失敗一定次數時,
代表這位遠端使用者來者不善,我們可以把它加到:
/etc/hosts.deny 把它黑名單掉!!
安裝下面套件可以自動完成這件防禦機制:
apt-get update
apt-get install denyhosts openssh-blacklist openssh-blacklist-extra
/etc/init.d/ssh restart


更詳細設定要參考下面設定檔,
包含對方連幾次才加黑名單之類的…
vi /etc/denyhosts.conf

-------------------------------------------------------------------------
※ 技術補充
遠端控制 rsh + sshpass
※ 注意,使用 rsh  時,Server 與 Client 必需有相同之使用者帳號,
若 Server 端使用 root 權限,則 rsh 所執行的指令於 Client 端也為 root 權限。

1. 於 server 端發遠端指令的方法參考 http://jamyy.us.to/blog/2013/08/5260.html 

2. 安裝
apt-get install sshpass rsh

3. 遠端 ssh 第一次,無需打 yes ,自動更新 known_hosts 檔方法:
建一設定檔於 PXE Server 端: /root/.ssh/config
StrictHostKeyChecking no

4 遠端下指令,注意目前執行 rsh 的使用者權限:
sshpass -p <密碼> rsh <主機 IP> <指令> &

※令 ssh 連線無需輸入密碼
於 PXE Server 端,指令` ssh-keygen `產生 public key ,
並 copy 至 Client 端:/root/.ssh/authorized_keys (自行建立)的檔案內。




2014年10月9日 星期四

CentOS 7 Network 設定


Cent OS 與我們常使用的 Debian 雖然都是 Linux 架構的系統,操作方式大致上也差不多,
但是許多設定檔的 所在目錄/檔名/語法 都不太一樣。

Cent OS 7 的網路設定檔放在下列目錄中 :

/etc/sysconfig/network-scripts/
ll /etc/sysconfig/network-scripts/ | grep ifcfg 可以看到下列訊息 ( ll = ls -l ):

-rw-r--r--. 1 root root   124 Oct  8 19:27 ifcfg-bridge0
-rw-r--r--. 1 root root   125 Oct  7 19:07 ifcfg-bridge10
-rw-r--r--. 1 root root   354 Oct  1 02:41 ifcfg-enp2s0.bak
-rw-r--r--. 1 root root   354 Oct  8 19:28 ifcfg-enp5s0
-rw-r--r--. 1 root root   254 Apr  2  2014 ifcfg-lo

這些就是我們目前擁有的 interface 設定檔

在 73 的網段中會抓到 enp4s0 和 enp5s0 兩張網卡(在老師的上課環境會抓到 enp2s0),
等同於我們使用 Debian 的 eth0 和 eth1 ,所以請先確定好你的網路線插哪張網卡的洞上,
再來編輯設定檔的內容。

(由於我是使用eth1的網路孔,所以下面就使用 enp5s0 來作示範)
  如果要使用固定 ip , 請先確定你的 ip /netmask /gateway
預設的設定檔內容如下:
HWADDR="00:0C:29:A6:22:15"
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes<
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=enp5s0
UUID="7e2c54c0-a09d-45ca-a074-7ed5d5d8ed32"
ONBOOT=yes
接下來請用 vim 來編輯這個檔案:

vim /etc/sysconfig/network-scripts/ifcfg-enp5s0

首先請把下列的內容刪掉或註解:
HWADDR="00:0C:29:A6:22:15"
UUID="7e2c54c0-a09d-45ca-a074-7ed5d5d8ed32"

除非有要綁網卡,否則這兩行用不到

DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no

這些目前也用不到,之後有機會再來整理

所以我們的設定檔就只剩下:
TYPE=Ethernet
BOOTPROTO=dhcp
ONBOOT=yes
NAME=enp5s0
再來加入裝置名,還有固定 ip 的設定:
DEVICE="enp5s0"
TYPE=Ethernet
BOOTPROTO=static
NAME=enp5s0
ONBOOT=yes
IPADDR=120.117.73.XX
NETMASK=255.255.255.0
GATEWAY=120.117.73.94
最後重啟網路看看設定是否成功:
[root@localhost ~]# /etc/init.d/network restart
or
[root@localhost ~]# systemctl restart network

觀看網卡資訊:
[root@localhost ~]# ifconfig  enp5s0
enp5s0: flags=4099  mtu 1500
        inet 120.117.73.80  netmask 255.255.255.0  broadcast 120.117.73.255
        ether 20:cf:30:30:72:20  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1  bytes 90 (90.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

觀看 gateway 設定:
[root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         120.117.73.94   0.0.0.0         UG    1024   0        0 enp5s0
修改 domain 與 nameserver:
[root@localhost ~]# vim /etc/resolv.conf
[root@localhost ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
domain stust.edu.tw
search stust.edu.tw
nameserver 120.117.2.2
nameserver 120.117.2.1

確定對外網路:
[root@localhost ~]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=46 time=17.3 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=46 time=17.1 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=46 time=17.2 ms

2014年10月8日 星期三

Android Compile on Ubuntu (整理中


此篇目的是為了編譯一個 Android source code,
過程中有遇到許多問題,全部都整理在最底部 Debug 區。

一、下載 Android Open Source 

1. 建立一個 Ubuntu-12.04_amd64 環境

下例為 QEMU 虛擬機跑 Ubuntu ,可參考:
安裝 QEMU 虛擬機
建立一個 arm.img 並且可以用虛擬機開機

Ubuntu Official: http://www.ubuntu.com/
Download: ubuntu-12.04.5-desktop-amd64.iso

開啟虛擬機:
qemu-img create ubuntuOS.img 80G

qemu-system-x86_64 -enable-kvm \
-cpu host \
-smp 4 \
-m 4000 \
-hda ubuntuOS.img \
-boot c 
-net nic \
-net bridge,br=br9 &

開始 Ubuntu 安裝…

2. 虛擬機連上網路:

本例使用 Bridge ,可以參考文章 Bridge 建立橋接網路
來讓虛擬機連上網際網路!
之後就可以透過 ssh 連線自己的虛擬機比較方便工作。

### 後面都是虛擬機環境下 ###

3. 下載 Android source code準備

下載 AOSP (Android Open Source Project),
需要準備幾個工具:curlgitpython
sudo apt-get update && apt-get install curl git python

### 接下來後面都用一般 User 權限 ###

4. 設定版本控制系統工具 git 

(於一般User 權限下) 
假設我的使用者帳號:myUser
假設我的 e-mail:myMail@gmail.com
git config --global user.name myUser
git config --global user.email myMail@gmail.com

5. 下載 repo 管理工具

(repo 是 Google所發展出來的工具, 適用於Android之初始化)
(於一般User 權限下)
mkdir ~/bin
echo 'export PATH=$PATH:~/bin' >> ~/.bashrc
source ~/.bashrc

curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

chmod u+x ~/bin/repo


6. repo 設定初始化

(於一般User 權限下)
mkdir ~/android_src ; cd ~/android_src
repo init -u https://android.googlesource.com/platform/manifest

後面的過程中,會出現問題(y/n),只要跟著預設選就行。

7. 開始下載 Source Code 

(需要漫長等待時間!容量近30GB)

cd ~/android_src
repo sync -j核心數


二、Android 核心編譯

1. 裝編譯相關套件
sudo apt-get update && apt-get install libglapi-mesa:i386 git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib gcc-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386

2. 安裝 Open JDK 7
sudo apt-get update && apt-get install openjdk-7-jdk

(於一般User 權限下)
加到可執行路徑:
echo 'export PATH=$PATH:/usr/lib/jvm/java-7-openjdk-amd64/bin' >> ~/.bashrc
source ~/.bashrc

3. 安裝 Java SE 6 JDK
(於一般User 權限下)
Oracle載點:Java SE Development Kit 6u45 ,
記得勾選「Accept License Agreement 」,可能需要會員,
 Ubuntu-12.04_amd64 下,這邊要載 jdk-6u45-linux-x64.bin
chmod u+x ./jdk-6u45-linux-x64.bin
./jdk-6u45-linux-x64.bin
sudo mv jdk1.6.0_45 /opt

加到可執行路徑:
echo 'export PATH=$PATH:/opt/jdk1.6.0_45/bin' >> ~/.bashrc
source ~/.bashrc

4. 下載 Prebuilt Binaries
要去找自己所使用的手機或硬體廠商所推出的驅動或 Binaries,本例所要編的硬體為 Cubieboard 1 (A10核心)

Web Site:Cubieboard Android 4.0.x Release
Download:Livesuit Program Linux(64bit)

下載會得到一個「LiveSuitV306_For_Linux64.zip」,接著:
unzip LiveSuitV306_For_Linux64.zip
cp LiveSuit_For_Linux64/LiveSuit.run ~/android-src/
cd ~/android-src/
chmod u+x LiveSuit.run
./LiveSuit.run

5. 開始編譯
設定環境參數
cd ~/android
source ~/android/build/envsetup.sh

開始編譯
lunch full-eng
make -j核心數

如果成功會看到下面訊息:


6. 模擬器開啟 Android
./out/host/linux-x86/bin/emulator








<pre class="codeblock prettyprint"></pre>






Debug1.
進入 Ubuntu 進行套件更新時出現:
GPG error: http://www.debian-multimedia.org etch Release: The following signatures couldn't be verified because teh public key is not available: NO_PUBKEY 123456789123456789
Sol 1:
APT 套件安裝管理

Debug2. 
若 apt-get install 安裝時出現訊息:
dpkg: error: configuration error: /etc/dpkg/dpkg.cfg.d/multiarch:1: unknown option 'foreign-architecture
Sol 2:
sudo rm /etc/dpkg/dpkg.cfg.d/multiarch


Debug3.
安裝「編譯相關套件」時,若出現:
E: Unable to locate package mingw32
E: Package 'python-markdown' has no installation candidate
Sol 3:
sudo vim /etc/apt/sources.list

找到鏡像站設定:
deb http://archive.ubuntu.com/ubuntu precise main
在 main 後面加上 universe

Debug4.
執行 ./LiveSuit.run 出現:
<pre class="codeblock prettyprint">Selecting previously unselected package awdev-dkms.
(Reading database ... 153279 files and directories currently installed.)
Unpacking awdev-dkms (from /tmp/awdev-dkms_0.5_all.deb) ...
dpkg: dependency problems prevent configuration of awdev-dkms:
 awdev-dkms depends on dkms (>= 1.95); however:
  Package dkms is not installed.
dpkg: error processing awdev-dkms (--install):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
awdev-dkms</pre>
Sol 4:
<pre class="codeblock prettyprint">sudo apt-get install awdev-dkms</pre>

Debug5.
進行 make ARCH=arm menuconfig,出現:
<pre class="codeblock prettyprint">[scripts/kconfig/mconf] Error</pre>

Sol 5:
<pre class="codeblock prettyprint">sudo apt-get install lib32ncurses5-dev</pre>

Debug 6.
當執行編譯指AT "make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage modules -j核心數",出現:
<pre class="codeblock prettyprint">make: arm-none-linux-gnueabi-gcc: Command not found
/bin/sh: 1: arm-none-linux-gnueabi-gcc: not found
make[2]: *** [scripts/mod/empty.o] Error 127
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [scripts/mod] Error 2
make[1]: *** Waiting for unfinished jobs....
make: *** [scripts] Error 2</pre>

Sol 6:
FriendlyARM下載 arm-toolchain

Debug7.
執行「./build.sh -p sun4i_crane -k 3.0」,出現:
[arch/arm/boot/uImage] Error

Sol 7:
sudo apt-get install u-boot-tools

Debug8.
執行「./build.sh -p sun4i_crane -k 3.0」,出現:
[dhd_linux.o] Error 1
[dhd-cdc-sdmmc-gpl] Error 2

Sol 8:
$ sudo apt-get install git gnupg flex bison gperf build-essential \
  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
  libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
  libgl1-mesa-dev g++-multilib mingw32 tofrodos \
  python-markdown libxml2-utils xsltproc zlib1g-dev:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

如果還是不行:
1. rm -r /home/user/a10_android/cb-A10/lichee/linux-3.0/modules/wifi/bcm40181/5.90.125.69.2/open-src/src/dhd/linux/dhd-cdc-sdmmc-gpl-3.0.8"
2. rm -r /home/user/a10_android/cb-A10/linux-3.0/modules/wifi/bcm40183/5.90.125.95.3/open-src/src/dhd/linux/dhd-cdc-sdmmc-gpl-3.0.8"

最後解決:
rm -r /home/user/a10_android/cb-A10/lichee/linux-3.0/modules/wifi/usi-bcm4329/v4.218.248.15/open-src/src/dhd/linux/dhd-cdc-sdmmc-gpl-3.0.8

Debug 9.
執行 make -j 4時:
dalvik/CleanSpec.mk:47: * missing separator. Stop.
#### make failed to build some targets (5 seconds) ####

Sol 9:
重開 Terminal,重新執行
source build/envsetup.sh
lunch
選11 apollo_cubieboard-eng
make -j8

Debug10.
執行 make -j4時:
Checking build tools versions...
******************************************************
You are attempting to build with the incorrect version
of java.

Your version is: java version "1.7.0_65".
The correct version is: Java SE 1.6.

Please follow the machine setup instructions at
    http://source.android.com/source/download.html
******************************************************
build/core/main.mk:131: *** stop.  Stop.

Sol 10:
1. java -version 出現「java version "1.6.0_45"」是正確的,
如果不對,就改 ~/.bashrc,加入以下:
export PATH=$PATH:/opt/jdk1.6.0_45/bin

重新載入 ~/.bashrc :
source ~/.bashrc

2. 先做 sudo update-alternatives --config java
以我的為例出現「There is only one alternative in link group java: /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java」,代表現在的系統預設沒設對,操作如下(記得ROOT):
sudo update-alternatives --install /usr/bin/java java /opt/jdk1.6.0_45/bin/java 300

sudo update-alternatives --config java
設定預設為「/opt/jdk1.6.0_45/bin/java」

同上,javac 也要改
sudo update-alternatives --install /usr/bin/javac javac /opt/jdk1.6.0_45/bin/javac 300

sudo update-alternatives --config javac
設定預設為「/opt/jdk1.6.0_45/bin/javac」

Debug11.
執行 make -j 4時,出現一堆:
error: unmappable character for encoding ASCII

Sol:

Debug12.
執行 make -j 4時,
[out/target/common/docs/api-stubs-timestamp] Error

Sol:



Debug12.
執行 make -j 4時,
make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1
make: *** Waiting for unfinished jobs....

Sol:



Debug13.
執行 time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage -j 4,出現:
arm-linux-gnueabi-ld: final link failed: No space left on device
make: *** [.tmp_vmlinux1] Error 1

sol:
硬磁空間不足,清出空間。

Debug14.
執行 time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage -j 4,出現:
drivers/built-in.o: In function `static_key_false':
/home/user/linux-sunxi/include/linux/jump_label.h:157: undefined reference to `__tracepoint_mmc_blk_rw_end'
/home/user/linux-sunxi/include/linux/jump_label.h:157: undefined reference to `__tracepoint_mmc_blk_rw_end'
/home/user/linux-sunxi/include/linux/jump_label.h:157: undefined reference to `__tracepoint_mmc_blk_erase_start'
/home/user/linux-sunxi/include/linux/jump_label.h:157: undefined reference to `__tracepoint_mmc_blk_erase_start'
/home/user/linux-sunxi/include/linux/jump_label.h:157: undefined reference to `__tracepoint_mmc_blk_erase_end'
/home/user/linux-sunxi/include/linux/jump_label.h:157: undefined reference to `__tracepoint_mmc_blk_erase_end'
/home/user/linux-sunxi/include/linux/jump_label.h:157: undefined reference to `__tracepoint_mmc_blk_rw_start'
/home/user/linux-sunxi/include/linux/jump_label.h:157: undefined reference to `__tracepoint_mmc_blk_rw_start'
make: *** [.tmp_vmlinux1] Error 1

sol 14:
http://linux-sunxi.org/FirstSteps#Building_the_kernel


Debug 15.
執行 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig 出現:
collect2: ld returned 1 exit status
make[1]: *** [scripts/kconfig/mconf] Error 1
make: *** [menuconfig] Error 2


Sol 15.
apt-get install libncurses5-dev

Debug 16. 
android 下執行 make 出現:
make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] Error 1

Sol 16.
sudo apt-get install lib32ncurses5-dev












Reference:
http://weiwei.pixnet.net/blog/post/31481109-%E7%B7%A8%E8%AD%AFandroid-source-code-%E9%8C%AF%E8%AA%A4%E8%A7%A3%E6%B1%BA%E8%BE%A6%E6%B3%95

https://github.com/crossfire77/Android_Toolchains

http://blog.logan.tw/2011/10/android-open-source-project-android.html

http://blog.logan.tw/2013/09/build-android-aosp.html


Android Official Website:
https://source.android.com/compatibility/downloads.html

Cubieboard Official:
http://cubieboard.org/download/

Cubieboard Open Source:
https://github.com/cubieboard

CC-A80-kernel-source:
https://github.com/cubieboard/CC-A80-kernel-source

http://cubian.org/sources/

http://dywang.csie.cyut.edu.tw/moodle23/dywang/clanguage/node106.html

http://dl.cubieboard.org/software/a10-cubieboard/android/

http://docs.cubieboard.org/tutorials/cb1/installation/building_android_ics_a10_image

http://source.android.com/source/initializing.html

http://persevere.iteye.com/blog/1479524

http://code.google.com/p/metadata-extractor/issues/detail?id=90

http://blog.csdn.net/zeng622peng/article/details/6837250

http://cheng-min-i-taiwan.blogspot.tw/2012/05/ubuntu-1204-64bit-android-ics.html

http://bbs.chinaunix.net/thread-2121093-1-1.html

https://github.com/linux-sunxi/linux-sunxi/issues/150

http://linux-sunxi.org/Toolchain

http://linux-sunxi.org/FirstSteps#Building_the_kernel

http://linux-sunxi.org/Linux_Kernel#A10

APT 套件安裝管理


高階包裝工具 APT (dvanced Packaging Tools),
為 Debian 發行的二進制下載機制,
也已經可以安裝在支援RPM的系統管理RPM套件。

1. 設定檔 (本例使用 Opensource)

vi /etc/apt/sources.list

## Security.debian
deb http://security.debian.org/ wheezy/updates main
deb-src http://security.debian.org/ wheezy/updates main

## Opensource
deb http://opensource.nchc.org.tw/debian/ wheezy main
deb-src http://opensource.nchc.org.tw/debian/ wheezy main
deb http://opensource.nchc.org.tw/debian/ wheezy-updates main
deb-src http://opensource.nchc.org.tw/debian/ wheezy-updates main


2. apt 操作用法:

資安套件及同步套件更新
apt-get update


已裝套件升級
apt-get upgrade


安裝與移除
apt-get install
apt-get remove


其他常用
apt-get -f install
apt-get autoremove
apt-get install debian-keyring


APT 的選單模式
aptitude


Debug 1.

問題:
GPG error: http://www.debian-multimedia.org etch Release: The following signatures couldn't be verified because teh public key is not available: NO_PUBKEY 123456789123456789

Sol:
apt-get install debian-keyring
gpg --keyserver pgp.mit.edu --recv-keys 123456789123456789
gpg --armor --export 123456789123456789 | apt-key add -

Debug 2.

問題,安裝 ARM-Toolchain 後,update 出現:
W: GPG error: http://www.emdebian.org wheezy Release: 由於無法取得它們的公鑰,以下簽章無法進行驗證: NO_PUBKEY B5B7720097BB3B58

Sol:
apt-get install emdebian-archive-keyring


Debug 3.

問題,`apt-get update` 後出現
W: 無法取得 http://dl.google.com/linux/chrome/deb/dists/stable/Release,Unable to find expected entry 'main/binary-armhf/Packages' in Release file (Wrong sources.list entry or malformed file)

E: Some index files failed to download. They have been ignored, or old ones used instead.





2015-07-01 新增

使 APT 套件,安裝時,可以按 [TAB] 鍵取得完整名稱。
sudo apt-get install bash-completion
source /etc/bash_completion

即可使用 [TAB] 功能:
apt-get ins [TAB]
apt-get install dove[TAB]
apt-get install dovecot[TAB]










http://askubuntu.com/questions/86375/apt-get-autocomplete-package-name-is-broken
http://webplay.pro/linux/ubuntu/enable-apt-get-autocomplete.html

Bridge 建立橋接網路 (還有缺,待補中)


1. 安裝套件

sudo apt-get install bridge-utils uml-utilities


2. 常用brctl 橋接指令,需要root權限

brctl help
brctl show
brctl addbr [Bridge Name]
brctl addif [Interface Name]
brctl delbr [Bridge Name]
brctl delif [Interface Name]


3. 建立橋接網路br0

sudo brctl addbr br0

4. 將 br0 橋接給 eth0 使用

sudo brctl addif br0 eth0

5.設定網路

sudo vi /etc/network/interfaces
## 說明
# 
#                 ->  eth0 -> 實體機
# Internet -> br0 ->
#                 ->  br1 -> N 個虛擬機
# 

# The loopback network interface
auto lo
iface lo inet loopback

iface eth0 inet manual
## interent -> br0 -> eth0 -> 實體機
auto br0
iface br0 inet static
       address [本機 ip]
       netmask [本機 netmask]
       gateway [本機 gateway]
       bridge_ports eth0
       bridge_fd 9
       bridge_hello 2
       bridge_maxage 12
       bridge_stp off

## interent -> br0 ->  br1 -> 虛擬機
auto br1
iface br1 inet static
       address 192.168.1.1
       netmask 255.255.255.0
       gateway [本機 ip]
       bridge_ports tap0
       bridge_fd 9
       bridge_hello 2
       bridge_maxage 12
       bridge_stp off 

6. 重啟動網路

ifconfig eth0 down
ifconfig eth0 up
/etc/init.d/netwroking restart

7. 查看網路連線

ifconfig
route -n
ping gateway
ping 8.8.8.8

8. 設定防火牆 iptables (ROOT)


echo 1 > /proc/sys/net/ipv4/ip_forward


### 下面的 br1 要看上面連虛擬機的 Bridge 設多少
iptables -A INPUT -i br1 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

9. 開啟 DHCP 服務

可以參考文章 DHCP Server 來安裝設定。

10. 開虛擬機連上網路

下面的 OS.img 檔案,可以參考文章
建立一個 arm.img 並且可以用虛擬機開機 來建立!


qemu-system-x86_64 -enable-kvm \
-cpu host \
-smp 4 \
-m 6000 \
-hda OS.img \
-boot c \
-net nic \
-net bridge,br=br1 &

------------------- Debug -------------------
# Question 1
Could not access KVM kernel module: No such file or directory
failed to initialize KVM: No such file or directory
Back to tcg accelerator.
qemu: could not load PC BIOS 'bios.bin'

#  Solution 1
sudo apt-get install seabios
sudo cd /usr/local/share/qemu
sudo ln -sf /usr/share/seabios/*.bin .

-----------------------------------------------------------------------------
# Question 2
failed to create tun device: Operation not permitted
failed to launch bridge helper
qemu-system-x86_64: -net bridge,br=br10: Device 'bridge' could not be initialized

qemu-bridge-helper 需要有 root 的權限才能執行

# Solution 2
chmod u+s /usr/local/libexec/qemu-bridge-helper

------------------------------------------------------------------------------
# Question 3
failed to initialize KVM: No such file or directory
Back to tcg accelerator.

# Solution 3
忘了…

-------------------------------------------------------------------
# Question 4
failed to parse default acl file `/usr/local/etc/qemu/bridge.conf'
failed to launch bridge helper

# Solution 4
vi /usr/local/etc/qemu/bridge.conf -> allow br1

---------------------------------------------------------------------
# Question 5
Could not access KVM kernel module: Permission denied
failed to initialize KVM: Permission denied

# Solution 5
建立 kvm 群組:
groupadd kvm

將自己的使用者 $USER 加到 kvm 群組中:
usermod -a -G kvm $USER

調整 /dev/kvm 使用者權限
chown root:kvm /dev/kvm
chmod 660 /dev/kvm

重新載入 kvm 驅動模組
rmmod kvm_intel kvm
modprobe kvm_intel kvm


# 如果還是不行,就請重新開機再試試
shutdown -r now

---------------------------------------------------------------------
# Question 6
qemu-system-x86_64: symbol lookup error: qemu-system-x86_64: undefined symbol: libusb_get_port_numbers

# Solution 6
先確認 libusb-1.0 有無安裝,版本對不對,再做以下指令重新連結:
sudo ln -sf /lib/x86_64-linux-gnu/libusb-1.0.so.0 /usr/local/lib/libusb-1.0.so.0





預設 X-Window 設定


當裝了多個圖形環境時,想選一個常用的來當作預設,
或者想要開機時,先進入文字介面,再自己手動進入
X - Window ,就需要動到以上設定:

update-alternatives --config x-session-manager
  選項       路徑             優先權  狀態
------------------------------------------------------------
  0            /usr/bin/metacity   60        自動模式
* 1            /usr/bin/icewm      50        手動模式
  2            /usr/bin/metacity   60        手動模式



update-alternatives --config x-window-manager 
  選項       路徑                           優先權  狀態
------------------------------------------------------------
  0            /usr/bin/gnome-session            50        自動模式
  1            /usr/bin/gnome-session            50        手動模式
  2            /usr/bin/gnome-session-fallback   40        手動模式
* 3            /usr/bin/icewm-session            10        手動模式





推薦音樂播放器 DeadBeef

DeadBeef 是一個號稱 Linux 界的 foobar2000
它的介面沒有太多的裝飾,完全專注在音樂的播放能力上,
但實用性非常高,還可以自定全域的快捷鍵,相當便利實用!

1. 安裝

官方:http://deadbeef.sourceforge.net/

載點:0.6.2 static portable build x86_64

下載完會得到壓縮檔:deadbeef-static_0.6.2-2_x86_64.tar.bz2,
習慣把應用程式放到 /opt 目錄下:
cd ~/Download
tar xfva deadbeef-static_0.6.2-2_x86_64.tar.bz2
sudo mv deadbeef-0.6.2 /opt


執行,如下圖:
/opt/deadbeef-0.6.2/deadbeef



2. 將 deadbeef 指令以 alias 加到家目錄 .bashrc 內。

vi ~/.bashrc


加入下面:
alias deadbeef='/opt/deadbeef-0.6.2/deadbeef'

:wq 儲存離開

source ~/.bashrc

3. 將指令放到 menu 及 toolbar 中。

vi /etc/X11/icewm/menu
vi /etc/X11/icewm/toolbar
prog "DeaDBeef"  deadbeef.png /opt/deadbeef-0.6.2/deadbeef

## 注意,deadbeef.png 要放到 IconPath 下。



Debug1. 如果開啟 Deadbeef 遇到訊息:

INFO: loading playlist Default
INFO: from file /home/skmpz/.config/deadbeef/playlists/0.dbpl
server_start
INFO: unlink socket: Permission denied
bind: Address already in use
Sol:
ls -l ~/.config/deadbeef/socket -------> 權限是否為 root ?
chown -R user:user ~/.config/deadbeef

將 deadbeef 包含子目錄下全部改為一般 user。

Shutter 圖片擷取工具


介紹一個 ScreenShot 工具,名稱為  shutter 
它的優點為:安裝簡單、使用容易,可以快速擷取圖片,
並立即編輯圖片,還可以指定好輸出路徑、定時擷圖等功能。

其介面如下圖:

1. 安裝。

sudo apt-get update && apt-get -y install shutter


2. 執行,只要直接 terminal 上打套件名稱 shutter。

shuuter

3. 編輯 menu 及 toolbar ,讓擷圖更便利。

vi /etc/X11/icewm/menu
vi /etc/X11/icewm/menu

一樣加入下面這行:

prog "Screenshot" shutter.png shutter


## 注意,shutter.png 圖檔要自己做,並放到 IconPath 下。

4. 簡易操作說明:


選取上圖的「擷取選取區域」,接著按住左鍵
框選要擷的區塊,放開後還可以再移動區塊微調,
最後決定截圖按 Enter,取消截圖按 Esc。

其它功能,更是很直覺的操作方法,按了就開始工作!
最後,可以到「編輯」 -> 「偏好設定」->「主要」,
修改輸出的品質、影像格式、名稱、位置…等,
自行客自化,並且可以再上方儲存成一個樣式。

5. 立即編輯圖片工具

在介面的右上角有「編輯」,可以立即編輯圖片,
為圖片加入文字、框線…等修改,並另存新檔!


建立一個 arm.img


首先,當然要先安裝 QEMU 虛擬機,可參考前面一章節,接著:

1. 建立目錄

(為了方便整理 QEMU Image 。)
cd ~
mkdir qemu_image
mkdir -p qemu_image/install
cd qemu_image/


2. 建立空的 qemu-img 檔:

qemu-img create arm.img 2G

接著可以用下面指令來查看檔案大小:
ls -l
du -sh arm.img

其中會發現, ls 所看到的遠比 du -sh 還來得大,
這是因為 qemu-img 會建立出一個「用多少就長多大」的 img,
為了節省儲存空間,但是最大可用值不會超過當初設定的 2GB 。

3. 下載 .iso 

台灣高品質學術研究網路(TWAREN)下載最新版 Debian armel 版之 .iso 檔。
網址路徑:
  http://ftp.twaren.net/Linux/Debian/debian-cd/7.6.0/armel/iso-cd/

載點: debian-7.6.0-armel-CD-1.iso

4. 下載 ARM 開機檔。

至 Debian 官方下載兩個 ARM 版開機所需檔案: initrd.gz 、 vmlinuz-3.2.0-4-versatile 。

官方網址路徑:
ftp://ftp.debian.org/debian/dists/wheezy/main/installer-armel/current/images/versatile/netboot/

載點:
initrd.gz
vmlinuz-3.2.0-4-versatile

把這兩個檔案下載至 ~/qemu_image/install 下。

5. 啟動 QEMU

於 ~/qemu_image 目錄下,
寫一個 Shell Script 來快速執行: QEMU 安裝 arm.img  。

vi buildarm.sh

buildarm.sh 的內容如下:
qemu-system-arm -M versatilepb -m 512 \
-kernel ./install/vmlinuz-3.2.0-4-versatile \
-initrd ./install/initrd.gz \
-hda arm.img \
-append "root=/dev/sda1"


再加入可執行權限:
chmod u+x ~/qemu_image/buildarm.sh

開始執行安裝:
sh ~/qemu_image/buildarm.sh

6. 最後,照安裝步驟來進行安裝。


7. 備份

複製 arm.img 為 arm_OK.img 做為備份,即可開始搞爛 arm.img !
~/qemu_image $ cp arm.img arm_OK.img






Reference: 

使用者、群組及密碼設定



1. 與使用者、群組及密碼設定相關之設定檔路徑

/etc/passwd -------------> 帳號設定檔
/etc/group ----------------> 群組設定檔
/etc/shadow --------------> 密碼設定檔

2. useradd 新增一個使用者

useradd 
  -m ---------------------------> 自動建家目錄
  -d homename ------------> 指定家目錄
  -g groupname ------------> 加入Main group
  -G ----------------------------> 加入Sub group
  -s /bin/bash ----------------> 設定Shell為bash

 usermod ---------------------> 修改使用者帳號


3. passwd 建立或修改使用者密碼

passwd -----------------------------------------------> 設定密碼
echo “user:password”  | chpasswd  ----------> 設定密碼,適用Script大量建帳號



4. groupadd 建立或移除一個群組

groupadd [GroupName] --------------------------> 建立群組
groupdel -r [GroupName] -------------------------> 移除群組


5. change 改變帳戶資訊

change -l [Account]  --------------------------> 觀看帳號資訊
change -d 0 [Account] -----------------------> 設定密碼只能用一次,擔入後就要換密碼


6. 檔案目錄權限

chown --------------------------> 改檔案、目錄的所有使用者
chgrp ---------------------------> 改檔案、目錄的所有群組
chmod --------------------------> 改檔案、目錄的權限





安裝 i386 之 .deb 檔

目標是於 x86_64 系統下,安裝 32 位元 .deb 檔套件。


假設,要安裝Adobe Reader i386時,首先要下載官方安裝軟體 .deb 檔。
載點:
https://get.adobe.com/tw/reader/download/?installer=Reader_8.1.7_Chinese_Trad_for_Linux_(.deb)&standalone=1


接著:


dpkg --add-architecture i386
apt-get update
apt-get -fy install
dpkg -i [AdobeReader..................deb]