Category: Operating System

  • ทบทวนที่เรียนจากติว PhoneGap ด้วย HTML5 & Jquery Mobile

    ผมต้องออกตัวก่อนนะครับว่า ไม่ได้เก่งในการเขียน Mobile Apps. เลยสักนิด เพียงแต่ได้ไปเข้าเรียนมา 2 วัน ผมรู้สึกว่าเป็นศาสตร์ที่น่าลองทำดู และไม่ควรให้มันจางหายไปหลังจากเรียน เดี๋ยววิทยากรจะเสียใจ อิๆ ผมจึงบันทีกไว้แบบใครอ่านแล้วไม่ชอบก็อย่าถือสาผมนะครับ

    ลองทบทวนจากที่เรียนใน workshop
    ติว “แนะนำและสอนการพัฒนาเบื้องต้นเกี่ยวกับ Application บนมือถือด้วย PhoneGap โดยใช้ HTML5 & Jquery Mobile”

    สภาพแวดล้อม
    – เป็นการติดตั้งทดสอบบน Windows 8 (32 bit) บนเครื่องโน้ตบุ๊ค HP ProBook 6450b RAM 4 GB

    1. download JRE
    http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
    32bit ได้ไฟล์สำหรับติดตั้ง jdk-7u25-windows-i586.exe
    (64bit ได้ไฟล์สำหรับติดตั้ง jdk-7u25-windows-x64.exe)
    รันไฟล์ดังกล่าวเพื่อติดตั้งลงในวินโดวส์

    2. download ADT
    http://developer.android.com/sdk/index.html
    32bit ได้ไฟล์ที่ zip ไว้คือ adt-bundle-windows-x86-20130729.zip
    (64bit ได้ไฟล์ที่ zip ไว้คือ adt-bundle-windows-x86_64-20130717.zip)
    แตกไฟล์ดังกล่าวออกมาแล้ว
    32bit ได้ไดเรกทอรี adt-bundle-windows-x86-20130729 ไว้ที่ C:\
    (64bit ได้ไดเรกทอรี adt-bundle-windows-x86_64-20130717 ไว้ที่ C:\)
    สร้าง shortcut ไปยังไฟล์ชื่อ eclipse.exe ในไดเรกทอรี eclipse ไว้บน Desktop
    ทดสอบรันโปรแกรม eclipse
    ตั้งชื่อ workspace ไว้ที่ C:\phonegap
    phonegap-000
    3. สร้าง Andriod Device ในโปรแกรม Java – ADT
    เมนู Windows > Android Virtual Device Manager
    แท็บ Android Virtual Devices คลิก New…
    ADV Name: ตั้งชื่อ ADV-7-inch
    Device: เลือก Nexus 7
    Target: เลือก Android 4.3 – API Level 18
    (adt-bundle-windows-x86-20130729.zip จะได้ Android 4.3 – API Level 18)
    Front Camera: None
    RAM: 768
    ทดสอบเปิด ADV-7-inch คลิก Start แล้วรอ ค่อนข้างนาน
    phonegap-001

    4. สร้าง New Android Application
    File > New > New Android Application
    ตั้งชื่อว่า phonegappsu
    ที่เหลือใช้ค่า default
    phonegap-002
    หน้าต่อไป Create Project in Workspace
    ตั้ง Location เป็นชื่อ C:\phonegap\phonegappsu
    phonegap-003
    หน้าต่อไป ใช้ค่า default
    phonegap-004
    หน้าต่อไป ใช้ค่า Blank Activity
    phonegap-005
    หน้าต่อไป ใช้ค่า default (Activity Name: MainActivity)
    phonegap-006
    คลิก Finish แล้วจะได้หน้าต่างของรายละเอียดเยอะแยะ
    phonegap-007

    5. download phonegap
    http://phonegap.com/install/ เลือก PhoneGap2.9.0
    ได้ไฟล์ที่ zip ไว้คือ phonegap-2.9.0.zip
    แตกไฟล์ดังกล่าวออกมาแล้ว ได้ไดเรกทอรี phonegap-2.9.0

    6. ที่ Windows Explorer เข้าไปในไดเรกทอรี phonegap-2.9.0
    ก็อปปี้เฉพาะไดเรกทอรี lib\android\example\assets\www
    phonegap-008
    ที่รายการด้านซ้ายของโปรแกรม ADT คลิกขวาที่ phonegappsu > assets แล้ววาง www ไว้

    ก็อปปี้เฉพาะไดเรกทอรี lib\andriod\xml
    phonegap-009
    ที่รายการด้านซ้ายของโปรแกรม ADT คลิกขวาที่ phonegappsu > res แล้ววาง xml ไว้

    ก็อปปี้เฉพาะไดเรกทอรี lib\android\cordova­2.9.0.jar
    phonegap-010
    ที่รายการด้านซ้ายของโปรแกรม ADT คลิกขวาที่ phonepagpsu > libs แล้ววาง cordova­2.9.0.jar ไว้
    รวมแล้วจะได้หน้าตาประมาณนี้
    phonegap-011

    7. แก้ไขไฟล์  MainActivity.java ( ข้อนี้ต้องระวังการ copy แล้ว paste เครื่องหมายคำพูด และ ; )
    ที่รายการด้านซ้ายของโปรแกรม ADT ใต้ Project ที่สร้าง
    phonegappsu > src > com.example.phonegappsu> MainActivity.java
    โดยคลิกขวา > ใช้คำสั่ง Open With > Text Editor
    (1)แก้ไขบรรทัดเดิม public class MainActivity extends Activity
    เป็น public class MainActivity extends DroidGap
    (2)แก้ไขชุดบรรทัด import เดิมดังนี้
    ลบบรรทัด import android.app.Activity;
    เพิ่มบรรทัด import org.apache.cordova.*;
    (3)แก้ไขบรรทัดที่มีคำว่า protected เป็น public
    (4)ใส่ comment บรรทัด //setContentView(R.layout.activity_main);
    (5)แล้วเพิ่มบรรทัด super.loadUrl(“file:///android_asset/www/index.html”);
    จะได้ประมาณนี้

    phonegap-012

    code

    package com.example.phonegap;
    
    import android.os.Bundle;
    import org.apache.cordova.*;
    import android.view.Menu;
    
    public class MainActivity extends DroidGap {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //setContentView(R.layout.activity_main);
            super.loadUrl("file:///android_asset/www/index.html");
        }
    
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
        
    }
    
    

    8. ต้องแก้ไข AndroidManifest.xml
    โดยคลิกขวา > ใช้คำสั่ง Open With > Text Editor
    ใส่ Permission Tag ดังนี้

    code

    <uses-permission android:name="android.permission.VIBRATE"/> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.RECEIVE_SMS"/> 
    <uses-permission android:name="android.permission.RECORD_AUDIO"/> 
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> 
    <uses-permission android:name="android.permission.READ_CONTACTS"/> 
    <uses-permission android:name="android.permission.WRITE_CONTACTS"/> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.CAMERA"/>

    ไว้ก่อนบรรทัดปิด Tag </manifest>

    9.  ติดตั้ง jquery.mobile
    download phonegapcomponent (jquery.mobile)
    เอาจาก facebook group ชื่อ phonegap for psu เลือก files (สามารถโหลดจาก http://jquerymobile.com/ ได้เลย)
    ได้ไฟล์ที่ zip ไว้คือ PhoneGapComponent.zip
    แตกไฟล์ดังกล่าวออกมาแล้ว ได้ไดเรกทอรี PhoneGapComponent
    ที่ Windows Explorer เข้าไปในไดเรกทอรี PhoneGapComponent
    ก็อปปี้เฉพาะไดเรกทอรี css และ js
    ที่รายการด้านซ้ายของโปรแกรม ADT คลิกขวาที่ phonegappsu > assets > www แล้ววาง css กับ js ไว้

    10. ทดสอบสร้าง Application จากตัวอย่าง index.html ที่ให้มา
    จะได้ไฟล์ phonegappsu.apk
    ที่รายการด้านซ้ายของโปรแกรม Eclipse ใต้ Project ที่สร้าง
    assets > www > โดยคลิกขวาที่ไฟล์  index.html > ใช้คำสั่ง Open With > Text Editor
    สั่ง Run
    phonegap-014

    11. ในข้อถัดไปเป็นตัวอย่างใน workshop เอาไฟล์ตัวอย่างจากที่นี่
    https://sharedrive.psu.ac.th/public.php?service=files&t=04facfa02dc0204fadbf00925d3c431c )

    12. ทดสอบด้วยตัวอย่างที่ 1 ชื่อ example1.html
    (ตัวอย่างนี้จะเปิด dialog หลังจากเลือกเมนู และบางเมนูเมื่อเลือกก็จะซ่อนข้อความ)
    นำไฟล์ตัวอย่าง example1.html ไปวางไว้ที่ phonegappsu > www
    phonegap-015
    แก้ไขไฟล์  MainActivity.java
    ที่รายการด้านซ้ายของโปรแกรม Eclipse ใต้ Project ที่สร้าง
    phonegappsu > src > com.example.phonegappsu> MainActivity.java
    แก้ไขบรรทัด super.loadUrl(“file:///android_asset/www/index.html”);
    เป็น super.loadUrl(“file:///android_asset/www/example1.html”);
    รันโปรเจกต์ ได้ผลแสดงบน ADV
    phonegap-016

    13. ทดสอบด้วยตัวอย่างที่ 2 ชื่อ example2.html
    (ตัวอย่างนี้จะมีปุ่ม back ให้ย้อนกลับได้)
    นำไฟล์ตัวอย่าง example2.html ไปวางไว้ที่ phonegappsu > www
    phonegap-017
    แก้ไขไฟล์  MainActivity.java
    ที่รายการด้านซ้ายของโปรแกรม Eclipse ใต้ Project ที่สร้าง
    phonegappsu > src > com.example.phonegappsu> MainActivity.java
    แก้ไขบรรทัด super.loadUrl(“file:///android_asset/www/index.html”);
    เป็น super.loadUrl(“file:///android_asset/www/example2.html”);
    รันโปรเจกต์ ได้ผลแสดงบน ADV
    phonegap-018

    14. ทดสอบด้วยตัวอย่างที่ 3 ชื่อ dbuser.html
    (ตัวอย่างนี้ป้อนชื่อ นามสกุล เพศ เก็บลง sqlite database บน android และแสดงรายการ
    ขอบคุณกิตติพัฒน์ อุบลกาญจน์ที่เป็นเจ้าของต้นฉบับไฟล์ที่แก้ไปเยอะจากที่วิทยากรให้ลองทำ)
    นำไฟล์ตัวอย่าง dbuser.html ไปวางไว้ที่ phonegappsu > www
    phonegap-019
    แก้ไขไฟล์  MainActivity.java
    ที่รายการด้านซ้ายของโปรแกรม Eclipse ใต้ Project ที่สร้าง
    phonegappsu > src > com.example.phonegappsu> MainActivity.java
    แก้ไขบรรทัด super.loadUrl(“file:///android_asset/www/index.html”);
    เป็น super.loadUrl(“file:///android_asset/www/dbuser.html”);
    รันโปรเจกต์ ได้ผลแสดงบน ADV
    phonegap-020

    15. หากต้องการทดสอบบน Android Smartphone เครื่องจริง ก็เอาไฟล์ phonegappsu.apk ไปใส่แล้วติดตั้ง
    ซึ่งไฟล์อยู่ที่ phonegappsu > bin

    ลองทำตามดูนะครับ

  • วิธีติดตั้ง Oracle Virtualbox Guest Additions สำหรับ Ubuntu 12.04 Guest

    การใช้งาน Oracle Virtualbox นั้น ต้องติดตั้ง Guest Additions เพื่อให้สามารถใช้งานความสามารถต่างๆได้มากขึ้น เช่น การ Sync Time ของ Guest จากตัว Host ได้, การ Copy-and-Paste ระหว่าง Guest กับ Host, ความสามารถในการ Copy File ข้ามระหว่าง Guest กับ Host  รวมถึง การใช้งาน Share Folder ด้วย

    สำหรับ Guest ที่เป็น Ubuntu 12.04 Server ซึ่งไม่มี GUI สามารถใช้คำสั่งต่อไปนี้ในการติดตั้ง

    1. ใน Guest OS, เลือกเมนู Device > Install Guest Additions …
    2. ที่ Prompt ใน Guest ต้องติดตั้ง dkms และ build-essential ก่อน ด้วยคำสั่ง
      # sudo apt-get install dkms build-essential
    3. จากนั้น mount เอา /dev/cdrom มาไว้ที่ /media/cdrom ด้วยคำสั่ง
      # sudo mount /dev/cdrom  /media/cdrom
    4. ติดตั้ง Guest Additions ด้วยคำสั่ง
      # sudo /media/cdrom/VBoxLinuxAdditions.run
    5. จากนั้น Reboot
      # sudo reboot

    การ Mount เอา Share Folder จาก Host มาให้ Guest เห็น  โดยอาจจะสร้าง directory
    สำหรับ Mount เอาไว้ชื่อ /media/vboxshare01
    และ Host ได้สร้าง share folder ชื่อ sharename
    ใช้คำสั่ง
    # sudo mkdir /media/vboxshare01
    # sudo mount -t vboxsf sharename /media/vboxshare01

  • HowTo: Windows 8 L2TP / IPsec VPN Setup Tutorial

    • เปิด Network and Sharing Center จาก Control panel
      2013-07-31_0933
    • คลิกที่ Set up a new connection or network2013-07-31_0934
    • คลิก Connect to a Workplace2013-07-31_0935
    • คลิก Use my Internet connection (VPN)2013-07-31_0937
    • ใส่ค่าต่างๆ ตามรูป2013-07-31_0938
    • คลิก Create แล้วมองที่ Taskbar ด้านล่างขวา คลิกที่รูปการเชื่อมต่อเครือข่าย เพื่อเรียกดูการเชื่อมต่อเครือข่ายต่างๆ จะพบว่ามี  vpn.psu.ac.th เพิ่มขึ้นมา ให้คลิกขวาที่ vpn.psu.ac.th
      2013-07-31_0942
      หรือ
      2013-07-31_1117
      2013-07-31_0942_001
    • เลือก View connection properties
      2013-07-31_0943
    • จะได้ดังรูป
      2013-07-31_0944
    • คลิกที่ Security ในช่อง Type of VPN เลือก Layer 2 Tunnelinig Protocol with IPsec (L2TP/IPsec) แล้วคลิก Advanced settings
      2013-07-31_0945
    • เลือก Use preshared key for authentication แล้วในช่อง Key: พิมพ์ว่า vpn key (อ่านว่า วี-พี-เอ็น-เว้นวรรค-คีย์) กด OK
      2013-07-31_0947
    • เลือก Allow these protocols แล้วคลิกเลือกทุกหัวข้อด้านล่าง ยกเว้น Automatically … แล้วคลิก OK
      2013-07-31_0947_001
    • คลิกที่รูปการเชื่อมต่อเครือข่าย เพื่อเรียกดูการเชื่อมต่อเครือข่าย คลิกที่ vpn.psu.ac.th คลิก Connect
      2013-07-31_0953
    • ใส่ Username และ Password ของ PSU Passport แล้วคลิก OK
      2013-07-31_0954
    • รอสักครู่
      2013-07-31_1131
    • จะได้เป็นดังรูป
      2013-07-31_0956
    • เมื่อเลิกใช้งาน คลิกที่รูปการเชื่อมต่อเครือข่าย เพื่อเรียกดูการเชื่อมต่อเครือข่าย คลิกที่ vpn.psu.ac.th คลิก Disconnect
      2013-07-31_1010
    • จบ ขอให้สนุกครับ…

    หมายเหตุ

    • หากต้องการให้ใส่ username และ password ใหม่ทุกครั้งให้เอาเครื่องหมายถูกหน้าข้อความ Remember my credentials ออกก่อนคลิก Create ในขั้นตอนแรก
    • หากล็อกอินแล้วได้ Error เกี่ยวกับ Certificate ให้กลับมาใส่ vpn key อีกครั้ง
    • Windows Vista/Windows 7 อาจใช้วิธีนี้ได้เช่นกันแต่วิธีการอาจต้องเปลี่ยนแปลงตามความเหมาะสมของ OS

    ที่มา

    • http://www.hideipvpn.com/2012/03/howto-windows-8-l2tp-ipsec-vpn-setup-tutorial/
  • Ubuntu NAT Router

    เพื่อนครูที่โรงเรียนหนึ่งสอบถามเข้ามาว่ากำลังจะทำ Linux Router ด้วย Ubuntu 12.04 ผมก็มีอยู่ตัวหนึ่งที่ใช้ใน workshop อยู่พอดี ผมติดตั้ง Ubuntu 12.04 ที่มี network interface card จำนวน 2 อัน ทำอยู่ใน Oracle VM VirtualBox ผมติดตั้ง BIND โปรแกรมสำหรับทำ DNS server และ ISC-DHCP-SERVER โปรแกรมสำหรับทำ DHCP server เอาไว้ใช้ในการทดสอบเมื่อมี VM Guest เครื่องอื่นๆอยู่ภายใน internal network ไม่ต้องไปรบกวน IP Address ของสำนักงาน เพราะเครื่อง Guest อื่นๆ จะขอ DHCP IP จาก Ubuntu Router นั่นเอง แล้วยังสามารถตั้งชื่อโดเมนเนมให้กับเครื่อง Guest ได้อีกด้วย ในกรณีที่เราทำใช้งานใน Oracle VM VirtualBox นั้น network interface eth0 ก็ตั้งค่า Network Adapter เป็น NAT และ network interface eth1 ก็ตั้งค่า Network Adapter เป็น Internet Network ตั้งชื่อว่า Intnet1 แต่หากนำไปติดตั้งเป็น Linux Router สำหรับโรงเรียนด้วยเครื่องจริง network interface eth0 ก็เป็น IP Address ที่ได้รับจาก ADSL หรือ Leased Line ส่วน network interface eth1 ก็ตั้ง IP Address ตามใจชอบ

    ubuntu-nat-router

    ผมจึงคิดว่าก็น่าจะลองเขียนเป็นคำแนะนำส่งให้กับครูท่านนั้น แต่เพื่อให้สามารถต่อยอดต่อไปอีกได้ ผมจึงเขียนสะสมไว้ในหัวข้อเรื่อง คือ Ubuntu NAT Router ที่ Link นี้ http://opensource.cc.psu.ac.th/Ubuntu_NAT_Router

    ผมจึงมาบอกเล่าให้เพื่อนๆฟังครับ เผื่อว่าใครกำลังมองหาวิธีการนี้อยู่

  • Mount & fstab

    วันนี้หลังจากติดตั้ง OS ใหม่ ก็มานั่งคิดๆ ดูว่าจะใช้ อะไรในการ mount โฟลเดอร์ที่ได้แบ่งแยกไว้แต่แรกมาใช้ได้อย่างไร ซึ่งจากเดิมจะใช้วิธีแก้แฟ้ม /etc/rc.local โดยเพิ่มข้อความเข้าไปประมาณว่า

    mount --bind /home/sipa /usr/share/fonts/truetype/sipa

    ซึ่งวันนี้ก็พบว่า มันไม่ทำงาน และเหมือนกับว่าถ้ามีการอัพเดต kernel แฟ้มนี้จะถูกเปลี่ยนกลับเป็นเหมือนเดิม คือ ไม่มีข้อความข้างต้นอยู่ข้างใน (อันนี้ยังไม่ยืนยันเพราะเจอแค่ครั้งเดียว)

    ต่อมาเลยนั่งมองว่าแล้วเราจะใส่แบบข้างบนลงไปในแฟ้ม /etc/fstab ได้มั้ย ทำอย่างไร ก็ค้นไปเรื่อยๆ พบว่าทำได้ โดยให้ใส่เพิ่มเข้าไปดังนี้

    /home/sipa /usr/share/fonts/truetype/sipa none  bind    0 0

    เมื่อแก้แฟ้มนี้เสร็จออกมาสั่ง

    sudo mkdir /usr/share/fonts/truetype/sipa ; sudo mount -a

    ได้ทันที ได้ผลเป็นที่น่าพอใจ

    มีอีกวิธี คือการสร้างเป็น Upstart job ทำได้โดย สร้างแฟ้ม /etc/init/mount-bind.conf โดยมีข้อความว่า

    #
    # bind mounts
    #
    description "bind"
    start on stopped mountall
    script
    mount --bind /home/sipa /usr/share/fonts/truetype/sipa
    end script

    ขอให้สนุกครับ

    ที่มา

    http://ubuntuforums.org/showthread.php?t=1642616

    http://www.linuxforums.org/forum/servers/28252-fstab-mount.html

  • update ownCloud new version (5.0.6 to 5.0.7)

    หลังจากวันก่อนเมื่อช่วงต้นเดือนเขียนบทความ เรื่อง “มาทำ Self-hosted cloud storage ด้วย ownCloud ใน PSU กันเถอะ” ผมก็ทดสอบการใช้งานไปเรื่อยๆ มีเพื่อนชาว PSU sysadmin มาร่วมกันทดสอบกัน 5-6 คน ซึ่งเป็นเวอร์ชั่น 5.0.6 มาวันนี้เมื่อเข้าในหน้า admin ก็จะพบว่ามีแจ้งเตือนว่ามีเวอร์ชั่นที่ใหม่กว่าแล้ว คือ 5.0.7 แล้ว ก็ทำการอัปเดตผ่านหน้าเว็บได้เลย ถ้ากำหนด file permission ให้แก่ webserver user (www-data) ที่ไดเรกทอรี /var/www/owncloud

    owncloud-update-01

    ผลลัพธ์คือเมื่ออัปเดตเสร็จจะพบว่าเข้าสู่โหมด maintenance

    owncloud-update-02

    เราในฐานะผู้ดูแลต้องไปปลดล็อกที่ไฟล์ config.php ด้วยครับ จากนั้นก็จะใช้งานได้แล้ว

    ย้อนสักนิด การติดตั้ง owncloud นั้นจะมีอยู่ 3 วิธี คือ Tar or Zip File เหมาะสำหรับมีเครื่อง server เอง, Web Installer เหมาะสำหรับ shared hosting และสุดท้ายคือ Linux packages เหมาะสำหรับอัปเดตแบบอัตโนมัติเมื่อทำ apt-get update และ apt-get upgrade นั่นเอง

    owncloud-installation-webpage

    วิธีที่ผมเลือกติดตั้งคือแบบ Tar File เอามาลงในเครื่อง server เอง ดังนั้นเมื่อมีอัปเดตเวอร์ชั่นใหม่ เราจะควบคุมเองได้ว่าจะทำเมื่อไร หลังจากทราบว่ามีเวอร์ชั่นใหม่ แตกต่างจากแบบ Linux packages ซึ่งจะอัปเดตไม่รอเรา อาจทำให้มีปัญหาได้หากเรามีการ manual ปรับปรุงไฟล์ php บางไฟล์ เช่นที่ผมทำคือต้องมีการแก้ไขไฟล์ ftp.php, base.php และ app.php ดังนั้นวันนี้ผมจึงมาบอกเล่าให้ฟังว่า การอัปเดตจากเวอร์ชั่นหนึ่งไปอีกเวอร์ชั่นหนึ่งแบบเล็กน้อย เรียกว่า update นะครับ และหากเป็นการเปลี่ยนแปลงใหญ่ จะเรียกว่า upgrade อันนี้อ่านมาจากเว็บ ownCloud ซึ่งวิธีการทำจะแตกต่างกัน

    วันนี้มาแนะนำวิธีการอัปเดต (update) ownCloud จากเวอร์ชั่น 5.0.6 ไปเป็น 5.0.7 ซึ่งหลังจากอัปเดตตามเค้าว่าแล้ว ผมก็มาปรับแต่งเพื่อให้เข้ากันกับ PSU อีกที ผมจึงเขียนเป็น wiki ไว้ที่เว็บ opensource.cc.psu.ac.th เรื่อง อัปเดต owncloud (5.0.6) เป็นเวอร์ชั่นสูงกว่า (5.0.7) สำหรับ PSU ซึ่งมีรายละเอียดการทำงานเป็นขั้นตอน โดยสรุปพบว่า เวอร์ชั่นใหม่นี้ยังไม่ได้แก้ไข bug ที่พบในไฟล์ 3 ไฟล์ที่จำเป็นสำหรับ PSU ครับ

  • มาทำ Self-hosted cloud storage ด้วย ownCloud ใน PSU กันเถอะ

    เมื่ือช่วงต้นเดือนพฤษภาคม ผมได้รับอีเมลเกี่ยวกับรายชื่อ cloud storage ที่มีให้บริการ เช่น dropbox เป็นต้น แล้วมีพูดถึงว่านอกจากบริการบนอินเทอร์เน็ต ยังมี open source software ชื่อ owncloud อีกตัวนึงที่มีคนทำไว้ใช้งานเองและใช้ได้จริง และเป็นที่นิยมกันมากมาย ผมเลยตามไปดูที่ owncloud.org และก็จุดประกายความคิดขึ้นมาต่อยอดจากที่งาน WUNCA26 ว่ามีอาจารย์ท่านนึงบรรยายเกี่ยวกับ cloud ว่าอยากให้มหาวิทยาลัยมี private cloud ใช้งาน อันนี้ก็เป็นอันหนึ่งคือ self-hosted cloud storage หมายถึง ตั้งเซิร์ฟเวอร์เองไว้เก็บไฟล์
    owncloud-in-psu-1
    owncloud ทำอะไรได้บ้าง ผมจินตนาการอย่างนี้นะครับ ผมจะมี directory เก็บไฟล์ทำงาน ซึ่งแน่นอนอาจต้องการอีกสักหนึ่งเพื่อไว้กิจกรรมอะไรก็ได้ และนำไฟล์เหล่านี้ไปเก็บบน server ทำให้ผมจะมีข้อมูลเก็บอยู่สองแห่ง (เครื่องผมและserver)  เมื่อผมแก้ไข เพิ่ม หรือ ลบไฟล์ แล้วจะมี sync client สักตัวทำการ sync ให้เท่ากัน เมื่อผมไม่ได้ใช้เครื่องคอมฯของตนเอง ผมก็สามารถเข้าเว็บเบราว์เซอร์แล้วเข้าไปที่ URL ที่กำหนดไว้ เช่น [ http://cloud.in.psu.ac.th ] เป็นต้น ผมก็สามารถ login เข้าทำงานกับไฟล์ของผมได้แล้ว จากนั้นก็คิดต่อไปว่าแล้วผมมี Android smart phone จะต้องใช้ได้ด้วย คือเปิดดูพวกไฟล์ pdf ได้เลย รวมถึงเมื่อถ่ายรูป ไฟล์รูปภาพก็จะอัพโหลดไปเก็บอยู่บน server ของผม และเมื่อผมกลับมาเปิดเครื่องคอมฯของตนเองอีกครั้ง โปรแกรม sync client ก็จะทำการ sync ไฟล์รูปภาพจาก server ลงมาเก็บไว้ใน directory ที่กำหนดไว้

    เป็นไงครับอ่านมาถึงตรงนี้ นึกออกแล้วใช่ไม๊ครับ ไม่เห็นภาพ ลองดูตัวอย่างจาก presentation เรื่อง คู่มือสำหรับผู้ใช้งาน ownCloud ครับ

    ตามนี้ [ https://sharedrive.psu.ac.th/public.php?service=files&t=494382205a552cc52f07e6855c991162 ]

    สองสัปดาห์ที่ผ่านมา ผมจึงลงมือทำการทดสอบ ติดตั้งง่ายครับใช้ ubuntu server 12.04.2 มีเรื่องที่ต้องสนใจ 2-3 เรื่อง เรื่องแรกคือจะใช้ฐานข้อมูลอะไร มีให้เลือก sqlite, MySQL, PostGresSQL เรื่องที่สองคือจะใช้ user name อะไรในการ login เข้าใช้งาน เรื่องที่สามคือจะกำหนดพื้นที่ดิสก์รวมอยู่กับ system หรือแยก partition ต่างหากสำหรับเก็บ data นอกจากนี้ก็เป็นการคอนฟิกเพิ่มเติมโปรแกรม (owncloud จะเรียกว่า Apps) เช่น Bookmark, News Feed, Web mail client เป็นต้น และสุดท้ายคือตั้งค่า disk quota สำหรับผู้ใช้แต่ละคน

    เริ่มต้นด้วยแบบง่ายๆก็ใช้ local user ของโปรแกรม owncloud เองเลย ซึ่งเก็บอยู่บนฐานข้อมูล sqlite ในขั้นตอนติดตั้ง แบบยากขึ้นมานิด จะใช้ External user support ได้อย่างไร ก็พบว่าทำได้จาก LDAP, IMAP, FTP server ผมเลือกใช้ FTP server เพราะว่าเราสามารถผสมใช้ linux user name พร้อมๆไปกับ PSU Passport ของมหาวิทยาลัยได้ด้วย ผ่านทาง FTP server และอนุญาตเฉพาะ user name ที่เป็นสมาชิกเท่านั้น ซึ่งเป็นความรู้ที่ได้รับจากหลวงพี่วิภัทรสั่งสอนไว้นั่นเอง คือ PSU-radius + vsftpd + pam_radius_auth

    ถัดมาก็ทดสอบเปลี่ยนไปใช้ MySQL database ก็ไม่ยุ่งยากอะไร คือ ต้องเตรียม database name, database user, database password ไว้ก่อน จากนั้นในขั้นตอนติดตั้งทางหน้าเว็บครั้งแรกให้เลือก Advanced เพื่อเลือกว่าจะใช้ MySQL แล้วระบุค่าสำหรับ database ที่เตรียมไว้นั้น

    ถัดมาก็ศึกษาวิธีการเปลี่ยนใช้ partition แยกต่างหากสำหรับ ownCloud data ซึ่งก็คือที่เก็บไฟล์ของ user แต่ละคนนั่นเอง หากให้คนละ 10 GB มีคน 100 คน ก็ต้องใช้ 1,000 GB เป็นต้นจึงจำเป็นต้องแยก mount disk ต่างหาก ตรงนี้จะเกี่ยวกับไฟล์ /etc/fstab ด้วยนะ นอกจากนี้ผมต้องการให้มีการ share with link เพื่อให้สาธารณะดูไฟล์ได้โดยผมจะส่งเป็นอีเมลไปให้ จึงต้องคอนฟิกเรื่อง mail อีกนิด

    การติดตั้งหลักๆเสร็จไปแล้ว ต่อมาก็ทดสอบการใช้งาน เริ่มต้นจากเมื่อ login เข้าใช้งานครั้งแรก จะมีหน้าต่าง wizard เชิญชวนให้ติดตั้ง Desktop Client ซึ่งมีสำหรับ Linux, Windows, Mac OS ซึ่งฟรีครับ นอกจากนี้ก็มีสำหรับ Android PlayStore, iOS AppStore แต่เนื่องจากต้องมีค่าใช้จ่ายสำหรับดาวน์โหลดทาง PlayStore และ AppStore ราคา 29 บาท ผมจึงเสาะหาพบว่า “ฟรี” ที่นี่ครับ [ http://f-droid.org ]จะมีโปรแกรม owncloud client ให้ใช้ฟรีๆครับ

    ทดสอบการใช้งาน พบว่ามี bug 2-3 เรื่อง เรื่องแรกการ share file ระหว่าง user name บน ownCloud กับ External user ยังไม่สมบูรณ์ จึงค้นหา google พบว่ามีคนบอกวิธีแก้ bug ไว้ให้ และ bug เกี่ยวกับเกิดมี error log record ผิดปรกติจำนวนมากใน /var/www/owncloud/data/owncloud.log ซึ่งไม่ควรจะมี ผมพบว่ายังมี bug อีก 2 อย่างที่ยังแก้ไขไม่ได้คือ disk quota แสดงผลไม่ตรงความจริง คือ ผมอัพโหลดไฟล์ไว้มากๆเพื่อลองทดสอบประมาณ 7พันกว่าไฟล์ ขนาด 7 GB กว่าๆ แต่โปรแกรมรายงานเพียง 2GB เท่านั้น และอีก bug คือ Apps ชื่อ Pictures Gallery เมื่อผมลบไฟล์รูปภาพไปแล้ว แต่ thumbnail picture ยังคงเก็บอยู่ อันนี้ผมซอกแซกเข้าไปดูในที่เก็บ คือ cd /var/www/owncloud/data/(user)/gallery/

    หากต้องการทดสอบ ให้อ่านเรื่อง ติดตั้ง owncloud (5.0.6) บน ubuntu (12.04.2) สำหรับ PSU [ http://opensource.cc.psu.ac.th/ติดตั้ง_owncloud_(5.0.6)_บน_ubuntu_(12.04.2)_สำหรับ_PSU ] อยู่ที่เว็บไซต์ opensouce.cc.psu.ac.th ครับ

    และนี่คือ Your Private Cloud Storage in PSU ครับ ขอบคุณครับ

  • วิธีตั้งค่า PSU Email สำหรับ Outlook Express

    การตั้งค่า Outlook Express ให้ใช้งานกับ PSU Email โดย สมมุติว่า

    1. ผู้ใช้ชื่อ Username Surname ใช้ email address เป็น username.s@psu.ac.th

    2. Incoming Server : mail.psu.ac.th

    และใช้งานผ่าน IMAP

    3. ตั้งค่า Outgoing Server: smtp2.psu.ac.th
    Port: 587
    และมีการเข้ารหัสข้อมูลในการส่ง (STARTTLS ) รวมถึงมีการยืนยันตัวตนก่อน (SMTP Authentication) ทำให้สามารถใช้งานได้จากทั่วโลก

     

    วิธีการตั้งค่า มีดังนี้

    1) ใส่ชื่อและนามสกุล

    001

    2. ใส่ email address

    002

    3. ตั้งค่าการเชื่อมต่อเป็น IMAP

    Incoming mail: mail.psu.ac.th

    Outgoning mail: smtp2.psu.ac.th

    003

    4. ใส่ username และ password ของ PSU Email

    004

     

    5. เสร็จการเริ่มต้นตั้งค่า

    005

    6.  ต่อไป เป็นการตั้งค่าความปลอดภัยอื่นๆ

    ไปที่ Tools > Accounts …

    006

    7. คลิกที่ Mail > mail.psu.ac.th > Properties

    จากนั้นคลิก Tab “Servers” , ในส่วนของ Outgoing Mail Server ให้ติ๊กที่ My Server requires authentication

    คลิกที่ปุ่ม Setting

    คลิกที่ Use same setting as my incoming mail server

    แล้วคลิก OK

    007

     

    8. ไป Tab “Advanced”

    ตั้งค่า Server Port Numbers ของ Outgoing  Mail Server เป็น 587

    และติ๊ก This server requires a secure connection (SSL)

     

     

     

    008

     

    เป็นอันเรียบร้อย

  • วิธีเอา index.php ของ Codeigniter ออกไป (Ubuntu/Linux Mint)

    1.สร้างไฟล์ .htaccess ในโปรเจกของท่าน ดำเนินใส่โค๊ดดังนี้ (สมมุติว่าเป็น /var/www/ci/)

    RewriteEngine on
    RewriteBase /ci/
    RewriteCond $1 !^(index\.php|assets|uploads|robots\.txt)
    RewriteRule ^(.*)$ index.php/$1 [L]

     

    2.เปิด  terminal และพิมพ์คำสั่ง เพื่อเปิด mod_rewrite

    sudo a2enmod rewrite

     

    3.เพิ่ม virtual host ใน /etc/apache2/sites-available/default

    sudo gedit /etc/apache2/sites-available/default

     

    4.เพิ่มโค้ดดังนี้

    <Directory /var/www/ci>
            Options Indexes FollowSymLinks MultiViews
                    AllowOverride All
                    Order allow,deny
                    allow from all             
    </Directory>

     

    5. Restart Apache

    sudo /etc/init.d/apache2 restart

     

    6.ไปที่โปรเจก codeigniter แก้ไขไฟล์  application/config/config.php เอา index.php ออก

    จาก $config[‘index_page’] = ‘index.php’;

    เป็น $config[‘index_page’] = ”;