2015年4月30日 星期四

架 DHCP Server 及 TFTP Server

上週課程延續問題:
可能遇到無法 update 的問題, apt-get update 輸出:
Release file for ftp://120.117.72.XX/debian/dists/wheezy-updates/Release is expired (invalid since 7d 4h 37min 49s). Updates for this repository will not be applied

這是因為自建鏡像站太久沒更新所造成的,可以先選擇連至其他鏡像站或以 getdeb.sh 更新。
getdeb.sh
#HOST=ftp.tw.debian.org
HOST=debian.nctu.edu.tw
#HOST=opensource.nchc.org.tw
#HOST=ftp.wa.au.debian.org
#HOST=120.117.72.71

# 國外鏡像站
#HOST=ftp.debian.org

debmirror \
        --arch=i386,amd64,armel,armhf,sha4 \
        --dist=jessie,jessie-updates \
        --di-arch=i386,amd64,armel \
        --di-dist=stable \
        --host=$HOST \
        --root=":debian" \
        --diff=none -p \
        --nosource \
        --method=rsync \
        --section main,contrib,non-free,main/debian-installer \
        --i18n \
        --ignore-release-gpg /home/ftp/debian/ ;

        #--section non-free,contrib,main,main/debian-installer,main/installer-armel,main/i18n,main/source \
#debmirror \
#       -v --nosource -d lenny/updates -a i386 \
#       -s non-free,contrib,main,main/debian-installer \
 #    --method=http -h security.debian.org \
 #    --ignore-release-gpg -r /debian-security /home/ftp/debian/security/
#       --section main,contrib,non-free,main/debian-installer,main/installer-armel,main/i18n,main/source \

#wget -r -l1 -nH ftp://$HOST/debian/dists/squeeze/main/source/
date


一、於 PXE 虛擬機架 DHCP Server

1. 安裝 dhcp
sh runpxeserver.sh

apt-get install isc-dhcp-server

裝完會出現 Start Faild 訊息,這是正常的,因為我們還沒改設定檔。

2. 修改設定檔 dhcpd.conf
vi /etc/dhcp/dhcpd.conf
option domain-name "example.org";
option domain-name-servers 120.117.2.1;

default-lease-time 600;
max-lease-time 7200;
allow booting;

subnet 192.168.10.0 netmask 255.255.255.0{
        range 192.168.10.100 192.168.10.200;
        option subnet-mask 255.255.255.0;
        option broadcast-address 192.168.10.255;
        option routers 192.168.10.1;
        option domain-name-servers 120.117.2.1;
#      next-server 192.168.10.254;
#      filename "pxelinux.0";

注意,若直接從網頁上複製貼上會出現亂碼,
遇到問題,需要 Debug 可以從 /var/log/syslog 查看訊息。
其中 DNS 要設為對學校的 120.117.2.1 ,router 即是 gateway 意思。

3. 重啟
/etc/init.d/isc-dhcp-server restart
systemctl enable isc-dhcp-server
systemctl status isc-dhcp-server

二、建 linux1.img 虛擬機
1. 於實體機建置
cd ~/qemu-img/virtual_classroom/
qemu-img create linux1.img 20G

2. 修改 build script 檔
複製 build.sh 檔,並做修改
cp buildpxe.sh buildlinux1.sh

記得修改最重要的兩項:
HDA=linux1.img
MAC="DE:AD:BE:CF:EC:B8"

3. 啟動測試 DHCP
sh buildlinux1.sh

只要 DHCP 的部份有順利連到即可,這週進度先不安裝。

三、開啟 winXP 虛擬機

1. 於 runwinXP.sh 加入虛擬網路卡
下面加入網卡:e1000, i82551, i82557b, i82559er, ne2k_pci, pcnet, rtl8139, virtio
-net nic,model=rtl8139
還有在 -hda $HDA 後方加入 -sdl

詳細設定如下:
CPU=host
SMP=4
MEMORY=2048
HDA=WinXp.img
MAC="DE:AD:BE:CF:EC:B9"
BRIDGE=br10
CDROM=/home/lin/iso/WindowsXP_Pro_SP2_CHT.iso

qemu-system-x86_64 -enable-kvm -cpu $CPU -smp $SMP -m $MEMORY \
-hda $HDA -sdl \
-cdrom $CDROM -boot c \
-net nic,macaddr=$MAC,model=rtl8139 -net bridge,br=$BRIDGE


2.進去更新 XP 
此時開機 XP,若之前有手動修改網路設定,現在要改為自動取得 IP,
正常要自動可以連到 DHCP 且有網路可以使用。

做 Windows 更新、升級至 XP SP3再去下載有的沒的需求:
Firefox
IE8
avira
FileZilla
...

四、於 PXE 虛擬機安裝 TFTP Server

1. 安裝 tftp
apt-get -y install tftpd-hpa

2. 下載網路開機套件 netboot.tar
wget http://ftp.debian.org/debian/dists/jessie/main/installer-amd64/current/images/netboot/netboot.tar.gz

3. 解壓至目錄 /srv/tftp 並重新啟動
tar xfva netboot.tar.gz -C /srv/tftp
/etc/init.d/tftpd-hpa restart
update-rc.d tftpd-hpa defaults
systemctl enable tftpd-hpa

4. 修改 /etc/dhcp/dhcpd.conf 設定
vi /etc/dhcp/dhcpd.conf

打開註解:
next-server 192.168.10.254;
filename "pxelinux.0";

5. 修改 buildlinux1.sh
vi buildlinux2.sh
CPU=host
SMP=2
MEMORY=1024
HDA=linux1.img
MAC="DE:AD:BE:CF:EC:B8"
BRIDGE=br10
CDROM=/home/lin/iso/debian-testing-amd64-CD-1.iso

qemu-system-x86_64 -enable-kvm -cpu $CPU -smp $SMP -m $MEMORY \
-hda $HDA \
-boot n \
-net nic,macaddr=$MAC -net bridge,br=$BRIDGE


執行 sh buildlinux1.sh 應該要可以連至網路






2015年4月24日 星期五

pdftk 合併多個pdf

pdftk是一套用以處理pdf的程式,


sudo apt-get -y install pdftk



例如:

pdftk 1.pdf 2.pdf 3.pdf cat output 123.pdf

就可以合併多個pdf。

2015年4月20日 星期一

Cura ( G-Code 轉檔軟體) 設定

3D 印表機可經由軟體 Blender 、FreeCAD…等各式繪圖軟體,
匯出 .stl 檔,再透過軟體 Cura 燒錄至 SD Card 供印表機讀取並 3D 列印。



先至官方下載軟體 Cura
https://ultimaker.com/en/products/software


接著照圖步驟設定 machine :







--------------------------------------------------------------------------------------------------------------
Cura舊設定




--------------------------------------------------------------------------------------------------------------

PLA 印料顏色不同,設定 Temp. & Flow 也不同,如下表:
(但並非每次都一定如表設定,不同批材質要各別測試)

--------------------------------------------------------------------------------------------------------------
2016.06.02 更新:

下載設定檔「3Dprint_1.75mm.ini」(該設定檔為使用 1.75mm 線材)
至 Cura → File → Open Profile... → 載入 .ini 設定檔案 (依所使用的線材修改線徑)

2016.10.01 更新:

Cura Basic & Advanced 設定更新

2015年4月4日 星期六

Cubieboard 自編 Cubieez image

編譯環境:
Ubuntu 12.04.5 LTS
arm-linux-gnueabihf-gcc-4.6
arm-linux-gnueabihf-g++-4.6
arm-linux-gnueabihf-cpp-4.6
安裝編譯所需之函式庫與程式:
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install ia32-libs
$ sudo apt-get install ncurses-dev
$ sudo apt-get install build-essential git u-boot-tools
$ sudo apt-get install texinfo texlive ccache zlib1g-dev gawk bison flex gettext uuid-dev
$ sudo apt-get install build-essential u-boot-tools uboot-mkimage
$ sudo apt-get install binutils-arm-linux-gnueabihf gcc-arm-linux-gnueabi
$ sudo apt-get install gcc-arm-linux-gnueabihf cpp-arm-linux-gnueabihf
$ sudo apt-get install libusb-1.0-0 libusb-1.0-0-dev
$ sudo apt-get install git wget fakeroot kernel-package zlib1g-dev libncurses5-dev
加入 fex2bin bin2fex 工具:
$ git clone https://github.com/cubieboard/sunxi-tools
$ cd sunxi-tools
$ make
$ sudo cp fex2bin bin2fex /usr/bin
建立編譯工作環境:
$ cd ~
$ mkdir linux-sdk-card
$ cd linux-sdk-card
< Kernel Source >:
$ git clone https://github.com/cubieboard/linux-sdk-kernel-source.git
$ mv linux-sdk-kernel-source linux-sunxi
< Tools >:
$ git clone https://github.com/cubieboard/linux-sdk-card-tools.git
$ mv linux-sdk-card-tools tools
< Products >:
$ git clone https://github.com/cubieboard/linux-sdk-card-products.git
$ mv linux-sdk-card-products products
< Rootfs & U-boot >:
$ git clone https://github.com/cubieboard/linux-sdk-binaries.git
$ mv linux-sdk-binaries binaries
從下方網站下載 Rootfs & U-boot 檔案至剛剛建立的 binaries 資料夾中:
http://dl.cubieboard.org/model/commom/linux-sdk-binaries
< List >:
u-boot-a20.tar.gz               #Cubieboard a20 u-boot          需解壓縮
u-boot-v10.tar.gz               #Cubieboard a10 u-boot          需解壓縮
cubieez-lxde-20140916.tar.gz    #Cubieboard 1/2 Cubieez-rootfs  不需解壓縮
cubieez-ct-20140916.tar.gz      #Cubietruck Cubieez-rootfs      不需解壓縮
開始編譯:
$ cd ~/linux-sdk-card
$ source tools/scripts/envsetup.sh
進行環境設定如下所示:
Products
   0 - cb
   1 - cb2
   2 - ct 
please select a board:0
#由於作者的版子是Cubieboard 1 所以在這邊選擇 0 - cb
   0 - cb-cubieez
   1 - cb-cubieez-cs
   2 - cb-debian-server
please select a system:0
#我們想編譯的 OS 為 Cubieez 所以選擇 0 - cb-cubieez
Creating working dirs
選擇完設定後會出現下面訊息:
Build sdcard image:
1. tf card boot
(1)cb_build_card_image (compile code to prepare cb_install_tfcard)
(2)cb_install_tfcard  storage_medium dev_label [pack]
     storage_medium:nand tsd tfx2
     dev_label:     sdb sdc sdd ...
     pack:          the parameter mean we will make a img for dd or win32writer
     cmd for example:cb_install_tfcard tsd sdb

2. tsd or nand card boot
(1)cb_build_flash_card_image(compile code to prepare cb_install_flash_card)
(2)cb_install_flash_card storage_medium dev_label [pack]
     (install TF card to flash img to tsd/emmc sdx is your sdcard label pc)
     storage_medium:nand tsd (tfx2 do not need this mode)
     dev_label:     sdb sdc sdd ...
     pack:          the parameter mean we will make a img for dd or win32writer
     cmd for example:cb_install_flash_card tsd sdb
接下來也可以按照個人需求,自行編譯核心模組:
$ cd linux-sunxi/
$ cp ../products/cb/cb-cubieez/kernel_defconfig .config
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
選擇完之後儲存離開 menuconfig ,並且把 .config 丟回去剛剛 cp 過來的地方覆蓋kernel_defconfig,指令如下:
$ cp .config ../products/cb/cb-cubieez/kernel_defconfig
$ make mrproper
$ cd ../
mrproper 是將編譯核心環境重置,不然等等在跑編譯程式會出現 error

開始編譯 image 前先編輯一下編譯的 script 檔:
$ vim tools/scripts/boardenvsetup.sh
cb_build_linux() 還有 cb_build_card_image() 中的 -jX 改成自己的核心數以加快編譯速度

開始編譯,指令如下:
$ pwd
/home/icewnful/linux-sdk-card
$ cb_build_card_image
編譯完後會再次出現下面訊息:
Build sdcard image:
1. tf card boot
(1)cb_build_card_image (compile code to prepare cb_install_tfcard)
(2)cb_install_tfcard  storage_medium dev_label [pack]
     storage_medium:nand tsd tfx2
     dev_label:     sdb sdc sdd ...
     pack:          the parameter mean we will make a img for dd or win32writer
     cmd for example:cb_install_tfcard tsd sdb

2. tsd or nand card boot
(1)cb_build_flash_card_image(compile code to prepare cb_install_flash_card)
(2)cb_install_flash_card storage_medium dev_label [pack]
     (install TF card to flash img to tsd/emmc sdx is your sdcard label pc)
     storage_medium:nand tsd (tfx2 do not need this mode)
     dev_label:     sdb sdc sdd ...
     pack:          the parameter mean we will make a img for dd or win32writer
     cmd for example:cb_install_flash_card tsd sdb
在安裝 image 之前,要先把要當作Cubieboard 系統碟的 SD 卡插入電腦,然後 dmesg 確定為 sdx 開始安裝 image 至 SD 卡中,指令如下:
$ cb_install_flash_card nand sdx pack
pack 參數是為了讓它除了安裝進 SD 卡以外,也將 image 的內容 pack 成 .img 檔案,
以便我們要將系統轉移至別張 SD 卡中
最後就是就是把做好的SD卡放入Cubieboard中測試了!!

Cubieboard 編譯 xmame X視窗 & SDL 版本

首先安裝一些編譯 xmame 會用到的函式庫,指令如下:
# apt-get install build-essential libgtk2.0-dev libgnome2-dev libsdl1.2-dev libxv-dev libxv1

接下來開始 xmame 的部份:
$ mkdir xmame && cd xmame
$ wget http://caltaxcn.googlecode.com/files/xmame-0.106.tar.bz2
$ tar xfva xmame-0.106.tar.bz2
$ cd xmame-0.106
建立好環境之後要編輯它的 make 檔

Make_File 1. ./src/unix/unix.mak 
( to  X11 / SDL ):
CFLAGS.risc_lsb = -DALIGN_INTS -DALIGN_SHORTS -DLSB_FIRST
to CFLAGS.arm = -DALIGN_INTS -DALIGN_SHORTS -DLSB_FIRST
Make_File 2. ./makefile.unix
( to X11 / SDL ):
CFLAGS =                to #CFLAGS =
CFLAGS = -O2            to #CFLAGS =
MY_CPU = i386           to MY_CPU = arm
音效設定:
# SOUND_ESOUND = 1
SOUND_ALSA = 1
# SOUND_ARTS_TEIRA = 1
# SOUND_ARTS_SMOTEK = 1
SOUND_SDL = 1
# SOUND_WAVEOUT = 1
SDL joystick support.:
JOY_SDL = 1
輸出模式(擇一)
# X11 (including Glide & OpenGL if enabled below):
DISPLAY_METHOD = x11
# SDL library:
DISPLAY_METHOD = SDL
再來就可以 make 了,編譯結束後會在 xmame-0.106 的資料夾中出現 xmame.x11 或 xmame.SDL 的執行檔,最後跟 mame 一樣只要做 Soft Link 給系統就完成了,指令如下:
# ln -s ./xmame.x11 or SDL  /usr/bin/xmame.x11 or SDL
# ln -s ./xmame.x11 or SDL  /usr/local/bin/xmame.x11 or SDL
# ln -s ./xmame.x11 or SDL  /usr/game/xmame.x11 or SDL

Cubieboard 編譯 Mame + SDL2

編譯之前需要先確定編譯環境,至少要有 gcc、g++、cpp 才行,如果沒有請使用下列指令安裝:
# apt-get install arm-linux-gnueabihf-gcc arm-linux-gnueabihf-g++ arm-linux-gnueabihf-cpp 
由於我們是要編譯 Arm 版的 mame 所以需要安裝的是armhf的編譯套件。

接下來開始編譯進入 Mame 的部份
$ mkdir mame && cd mame
$ wget http://mamedev.org/downloader.php?file=releases/mame0159s.zip
$ unzip mame0159s.zip
$ unzip mame.zip
這時候會把 Mame-0.159 的編譯檔案都解出來在 mame資料夾中

再來做第一次編譯
$ make
有可能會遇到下列問題:

Mame_Error 1. alsa的函式庫未安裝,解決方法如下:
# apt-get install libasound2-dev
Mame_Error 2. moc error ,解決方法如下:
# apt-get install automoc
Mame_Error 3.
src/osd/sdl/sdlinc.h:5:22: fatal error: SDL2/SDL.h: 沒有此一檔案或目錄
compilation terminated.
make: *** [obj/sdl/osd/sdl/sdlos_unix.o] Error 1
這個問題是因為 Mame編譯時需要用到SDL2,而Cubieboard的套件只有SDL1的關係,所以我們必須自行編譯SDL2,解決方法如下:
$ mkdir SDL2 && cd SDL2
$ wget http://www.libsdl.org/release/SDL2-2.0.3.tar.gz
$ tar xfva SDL2-2.0.3.tar.gz && cd SDL2-2.0
$ ./configure
在configure中會出現 dbus 的 warning ,解決方法如下:
# apt-get install libdbus-1-dev
接下來重新執行./configure後就可以進行make了,指令如下:
$ make all
SDL2_Error 1 .
/home/cubie/SDL2/SDL2-2.0.3/src/render/opengles2/SDL_gles2funcs.h:70:1: error: unknown type name 'GLchar'
make: *** [build/SDL_render_gles2.lo] Error
解決方法如下:

先備份 /usr/include/GLES2/ 裡面的 gl2.h & gl2ext.h 檔案,然後到下列網站下載新的 gl2.h & gl2ext.h 檔。
http://blog.eldajani.net/banana-pi-arch-linux-snes-emulation-using-retroarch/
解決之後 make 就會成功了,然後安裝SDL,指令如下:
# make install
再來回到 Mame 的編譯
Mame_Error 4.
src/osd/modules/font/font_sdl.c:12:26: fatal error: SDL2/SDL_ttf.h: 沒有此一檔案或目錄
compilation terminated.
make: *** [obj/sdl/osd/modules/font/font_sdl.o] Error 1
這是因為SDL2的字型函式庫沒安裝,解決方法如下:
$ wget http://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.0.12.tar.gz
$ tar xfva SDL2_ttf-2.0.12.tar.gz
$ cd SDL2_ttf-2.0.12
$ ./configure
$ make all
# make install
Mame_Error 5.
collect2: ld terminated with signal 9 [已砍掉]
make: *** [mame] Error 1
這個問題是因為編譯 Mame,把記憶體與 swap 用光造成崩潰的關係,所以我們必須手動增加 swap,指令如下:
# dd if=/dev/zero of=moreswap bs=1M count=512
# mkswap moreswap
# swapon moreswap
# swapon -s
再來就能正常編譯了,編譯完會在 mame 的資料夾中出現 mame 的執行檔,最後把執行檔做 Soft Link 至 /usr/bin  /usr/local/bin  /usr/game/ 中就可以了。指令如下:
# ln -s ./mame  /usr/bin/mame
# ln -s ./mame  /usr/local/bin/mame
# ln -s ./mame  /usr/game/mame