ติดตั้ง owncloud (5.0.6) บน ubuntu (12.04.2) สำหรับ PSU

จาก Wiki Opensource

บันทึกนี้ไม่ทันสมัย ห้ามใช้งานแล้ว

บันทึกนี้ปรับปรุงล่าสุดเมื่อวันที่ 9-07-2556

ดูแลโดย WIBOON

  • ทดสอบกับ owncloud 5.0.6, 5.0.7, owncloud client 1.2.5
  • ทดสอบกับ ubuntu server 12.04.2
  • ทดสอบติดตั้ง ownCloud เป็น Virtual Machine ใน Oracle VM VirtualBox


ข้อกำหนด
1. เรื่องการกำหนดพื้นที่ทำงาน ในที่นี้ขอเลือกแบบง่ายๆก่อน คือ ใช้พื้นที่ตามค่า default ของการติดตั้ง ubuntu server คือใช้ / และ linux-swap
2. เรื่อง username ที่จะใช้ เนื่องจากต้องการให้ใช้ PSU Passport ของม.อ. แต่เลือกได้ว่าจะให้ใครมาใช้งานบ้าง จึงกำหนดให้ใช้ External user support แบบ FTP server + /lib/security/pam_radius_auth.so
3. username ที่ใช้ในการติดตั้ง ubuntu server คือ mama และ password คือ 123456
4. ต้องการให้ server นี้เป็นทั้ง web server, ftp server, share file server และ ownCloud (dropbox alternative) server จึงลองติดตั้งโดยใช้โปรแกรมชุด PSU-radius และ PSU-netdrive ที่มีอยู่แล้ว

วิธีทำ
1. ติดตั้ง ubuntu 12.04.2 ในขั้นตอน Install ให้เลือกแพ็กเกจ OpenSSH และ LAMP

2. อัปเดต OS
sudo apt-get update
sudo apt-get dist-upgrade

3. ลบแพ็กเกจเก่าๆที่ไม่ใช้แล้วที่เกิดจากการอัปเดต
sudo apt-get autoremove

4. ติดตั้ง FreeRADIUS
ทำขั้นตอนตามเอกสารการติดตั้ง PSU-radius บน ubuntu
wget http://ftp.psu.ac.th/pub/psu-radius/psu-radius.tgz -N -P /tmp
tar -zxpvf /tmp/psu-radius.tgz -C /tmp
cd /tmp/psu-radius
sudo sh install-psu-radius.sh
sudo radtest mama 123456 127.0.0.1 0 testing123
หมายเหตุ
การนำไปใช้งานจริงต้องเปลี่ยน password ของ mama และ radius secret key ใน /etc/freeradius/clients.conf

5. ติดตั้ง shell script สำหรับจัดการบัญชีผู้ใช้ linux user name
ทำขั้นตอนตามเอกสารการติดตั้ง PSU-netdrive บน ubuntu
wget http://ftp.psu.ac.th/pub/psu-netdrive/psu-netdrive.tgz -N -P /tmp
tar -zxpvf /tmp/psu-netdrive.tgz -C /tmp
cd /tmp/psu-netdrive
sudo sh install-psu-netdrive.sh

6. สร้าง user name สำหรับทดสอบ
สร้าง local linux username
sudo sh /root/netuseradd.sh bob
สร้าง PSU passport username เช่น user1.a
sudo sh /root/netuseradd.sh user1.a -y

7. ปรับแต่งระบบ vsftpd ให้รองรับใช้กับ apps ชื่อ External user support นั้นคือต้องให้ใช้ local user name login เข้า FTP server ได้
(1) แก้ไขไฟล์คอนฟิก
sudo vi /etc/vsftpd.conf
แก้ไขตัวแปรเป็นดังนี้
anonymous_enable=YES
local_enable=YES
user_sub_token=$USER
local_root=/sftp/home/$USER
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
และตรวจสอบเปรียบเทียบดูว่าค่า default ของตัวแปรต่างๆที่ใช้อยู่เป็นดังนี้
listen=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
(2) เพิ่มไฟล์
sudo vi /etc/vsftpd.chroot_list
ใส่ชื่อบัญชีที่ยกเว้น ดังนี้
mama
(3) แก้ไขไฟล์ เพื่อเติม /lib/security/pam_radius_auth.so
sudo vi /etc/pam.d/vsftpd
เพิ่มบรรทัดเหนือ @include common-auth
auth sufficient /lib/security/pam_radius_auth.so
@include common-auth
(4) รีสตาร์ท vsftpd
sudo service vsftpd restart
(5) ทดสอบเข้าใช้งานด้วย username bob และ user1.a
ftp localhost

8. ติดตั้งโปรแกรมที่ต้องใช้ร่วมกับ ownCloud (ตัด samba ออกเพราะไม่คิดจะใช้)
sudo apt-get install apache2 php5 php5-gd php-xml-parser php5-intl
sudo apt-get install php5-sqlite php5-mysql curl libcurl3 php5-curl

9. ดาวน์โหลด ownCloud จาก owncloud.org (ขณะที่เขียนเป็นเวอร์ชั่น 5.0.6)
wget http://download.owncloud.org/community/owncloud-5.0.6.tar.bz2
อัปเดตเป็น 5.0.7 ใช้บรรทัดล่างแทน
wget http://download.owncloud.org/community/owncloud-5.0.7.tar.bz2

10. ติดตั้ง ownCloud
(1) สร้างไดเรกทอรีของโปรแกรม
tar -xjf owncloud-5.0.6.tar.bz2
อัปเดตเป็น 5.0.7 ใช้บรรทัดล่างแทน
tar -xjf owncloud-5.0.7.tar.bz2

sudo cp -r owncloud /var/www/
(2) สร้างไดเรกทอรีเพิ่มสำหรับเป็นที่เก็บ data
sudo mkdir -p /var/www/owncloud/data
(3) กำหนดสิทธิ
sudo chown www-data:www-data /var/www/owncloud/data
sudo chown -R www-data:www-data /var/www/owncloud/apps/
sudo chown -R www-data:www-data /var/www/owncloud/config/
(4) ตรวจสอบว่ามีไฟล์สำคัญคือ .htaccess
cat /var/www/owncloud/.htaccess
(5) เพิ่ม apache module rewrite ตามเอกสารการติดตั้ง apache บน ubuntu
sudo a2enmod rewrite
(6) เพิ่ม apache module ssl (https) ตามเอกสารการติดตั้ง apache บน ubuntu
wget ftp://ftp.psu.ac.th/pub/apache/apache2-ssl.tar.gz
tar -zxvf apache2-ssl.tar.gz -C /tmp
sudo mv /tmp/ssleay.cnf /usr/share/apache2
sudo mv /tmp/apache2-ssl-certificate /usr/sbin
sudo mkdir -p /etc/apache2/ssl
sudo a2enmod ssl
sudo apache2-ssl-certificate
กดแป้น Enter ไม่ต้องป้อนข้อมูลก็ได้สำหรับ self-signed certificate
(7) แก้ไขไฟล์ default ของ apache
sudo vi /etc/apache2/sites-available/default
แก้ไข 2 จุด
จุดที่ 1 เกี่ยวกับ module rewrite บรรทัดที่ 9-14
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride all <-- เปลี่ยนจาก None เป็น all
Order allow,deny
allow from all
</Directory>
จุดที่ 2 เกี่ยวกับ module ssl เพิ่มต่อท้ายดังนี้
<VirtualHost *:443>
ServerAdmin webmaster@localhost

DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
</Directory>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
</VirtualHost>
(8) รีสตาร์ท apache
sudo service apache2 restart

11. เริ่มติดตั้งระบบ owncloud ผ่านหน้าเว็บ
http://server_ip/owncloud/
จะได้หน้าเว็บ Create an admin account
(1) ตั้งชื่อแรกที่จะเป็นผู้ดูแลระบบ เช่น
username: admin หรืออื่นๆตามชอบ
password: ตั้งตามชอบ
คลิกปุ่ม Finished
(2) เข้าสู่หน้าเว็บ admin
(3) เพิ่ม apps ชื่อ External user support (Use external user authentication methods) ทำดังนี้
คลิกรายการ apps ใต้ชื่อ admin ด้านบนขวามือ
ตั้งค่า Default Storage เช่น 1 GB เป็นต้น ทำดังนี้
คลิกรายการ users ใต้ชื่อ admin ด้านบนขวามือ
เลือก 1 GB จากปุ่ม drop down list

12. ปรับแต่ง config.php ของ ownCloud ให้รองรับการใช้ External user support
sudo vi /var/www/owncloud/config/config.php
แก้ไขตามนี้
$CONFIG = array (
บรรทัดอื่นๆ
'user_backends' => array (
array (
'class' => 'OC_User_FTP',
'arguments' => array ('localhost'),
),
),
บรรทัดอื่นๆ
);

13. ปรับแต่ง ftp.php ของ owncloud ให้รองรับการใช้งานทาง desktop sync clients
(ศึกษาจาก https://github.com/owncloud/apps/issues/302)
cd /var/www/owncloud/apps/user_external/lib/
sudo cp ftp.php ftp.php-orig
sudo vi ftp.php
โดยเพิ่มส่วน add patched และใส่ comment ส่วน remove patched ดังนี้
บรรทัดอื่นๆ
public function checkPassword($uid, $password) {
$url=$this->protocol.$uid.':'.$password.'@'.$this->host.'/';
$result=@opendir($url);
if(is_resource($result)) {
//add patched เพิ่มตั้งแต่ตรงนี้
if(OC_User::userExists($uid)) {
OC_User::setPassword($uid, $password);
} else {
OC_User::createUser($uid, $password);
OC_Group::createGroup('ftpauth');
OC_Group::addToGroup($uid, 'ftpauth');
}
//end add patched ถึงตรงนี้
return $uid;
}else{
return false;
}
}
//remove patched ใส่คอมเม้นตั้งแต่ตรงนี้
# public function userExists($uid) {
# return true;
# }
//end remove patched ถึงตรงนี้
บรรทัดอื่นๆ

14. ทดสอบเข้าใช้งานทางหน้าเว็บด้วย external username

15. ทดสอบเข้าใช้งานทาง desktop sync client (ติดตั้งจาก http://owncloud.org/sync-clients/)

16. ตั้งค่า mail configuration เพื่อให้ owncloud ส่ง share with link ไปให้อีเมลได้
(1) ติดตั้งโปรแกรม postfix ด้วยคำสั่ง
sudo apt-get install postfix
เลือก Local only หรือ Internet with smarthost
system mail name: server1 ชื่อเครื่อง
(2) แก้ไขไฟล์ที่จำเป็นให้ local mail server สามารถส่งอีเมลออกได้
แก้ไขแฟ้ม /etc/postfix/main.cf ด้วยคำสั่ง
sudo vi /etc/postfix/main.cf
ปรับปรุงค่าตัวแปรดังนี้คือ
default_transport = smtp
relay_transport = smtp
relayhost = เช่น ม.อ.คือ smtp.psu.ac.th
เสร็จแล้วสั่งให้ posftix ทำงานใหม่ด้วยคำสั่ง
sudo /etc/init.d/postfix restart
ลองส่งอีเมลด้วยคำสั่งประมาณว่า
echo hello | sendmail user@server.domain
แล้วลองไปดูอีเมลของ user@server.domain จะต้องได้รับอีเมลข้อความว่า hello แสดงว่าใช้งานได้แล้ว
(3) แก้ไขไฟล์ config.php ของ ownCloud ให้รองรับการส่งอีเมล
sudo vi /var/www/owncloud/config/config.php
ตั้งค่าโดยใช้ PHP mail (เลือกจาก SMTP, PHP mail, Sendmail and qmail)
แก้ไขตามนี้
$CONFIG = array (
บรรทัดอื่นๆ
"mail_smtpmode" => "php",
"mail_smtphost" => "127.0.0.1",
"mail_smtpport" => 25,
"mail_smtptimeout" => 10,
"mail_smtpsecure" => "",
"mail_smtpauth" => false,
"mail_smtpauthtype" => "LOGIN",
"mail_smtpname" => "",
"mail_smtppassword" => "",
บรรทัดอื่นๆ
);


[วิธีทำเรื่องอื่นๆเพิ่มเติม]

(เพิ่มเรื่องนี้เมื่อ 9 ส.ค. 56) (เลือกทำ) การตั้งค่าให้อัปโหลดไฟล์ที่มีขนาดใหญ่กว่า 513 MB ได้ เช่น ต้องการถึง 2GB เป็นต้น
ให้แก้ไขที่ไฟล์นี้ .htaccess ที่อยู่ในไดเรกทอรี owncloud ดังนี้
sudo vi /var/www/owncloud/.htaccess
แก้ไขที่บรรทัด เดิม
php_value upload_max_filesize 513M
php_value post_max_size 513M
เปลี่ยนใหม่ เป็น
php_value upload_max_filesize 2G
php_value post_max_size 2G

(เลือกทำ) การตั้งค่าระยะเวลาจำนวนวันในการเก็บไฟล์ใน recycle bin (default จะเป็น 180 วัน หรือ เมื่อ disk ถึงจุดที่กำหนดของโปรแกรม)
เช่นต้องการเก็บไว้เป็นจำนวน 7 วัน แล้วให้ระบบลบทิ้งอัตโนมัติ
sudo vi /var/www/owncloud/config/config.php
แก้ไขตามนี้
$CONFIG = array (
บรรทัดอื่นๆ
'trashbin_retention_obligation' => 7,
บรรทัดอื่นๆ
);

(เลือกทำ) กรณีที่ต้องการใช้ MySQL database
1. สร้าง database และกำหนดสิทธิ คล้ายกับตัวอย่างข้างล่างนี้
mysql -uroot -p -e "CREATE DATABASE ocdb CHARACTER SET 'UTF8';"
mysql -uroot -p -e "grant all privileges on ocdb.* to 'ocuser'@'localhost' identified by ocpass';"

2. ติดตั้งชุดโปรแกรม owncloud

3. เข้าโปรแกรม owncloud ครั้งแรกทางหน้าเว็บ ให้เลือกคลิกปุ่ม advanced เพื่อเลือก database คือ mysql

4. ป้อนข้อมูลที่เกี่ยวกับ database ที่สร้าง

(เลือกทำ) กรณีที่ต้องการใช้งานชื่อโดเมน เช่น owncloud.example.com
1. เพิ่มไฟล์ให้มีชื่อตั้งตามชื่อโดเมน
sudo vi /etc/apache2/sites-available/owncloud.example.com
เขียนชุดคำสั่ง Virtual Host ดังนี้
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName owncloud.example.com
DocumentRoot /var/www/owncloud
<Directory /var/www/owncloud/>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
</Directory>
</VirtualHost>
NameVirtualHost *:443
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName owncloud.example.com
DocumentRoot /var/www/owncloud
<Directory /var/www/owncloud/>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
</Directory>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
</VirtualHost>
</IfModule>

2. สั่ง enable site ด้วยคำสั่ง
sudo a2ensite owncloud.example.com

3. รีสตาร์ท apache
sudo service apache2 restart

4. เข้าใช้งานด้วยชื่อหน้าเว็บ
http://owncloud.example.com หรือ
https://owncloud.example.com


(เลือกทำ) วิธีเพิ่มดิสก์ใหม่สำหรับ owncloud
1. ปิด VM ก่อน

2. คลิกเลือก Storage > คลิกเลือก Controller: SATA > คลิกเครื่องหมาย + (Add Hard Disk)

3. เลือก Create new disk > เลือก VHD (Virtual Hard Disk)

4. เลือก Dynamically allocated > ตั้งชื่อและกำหนดขนาดพื้นที่ > คลิก Create

5. คลิก OK

6. เปิด VM

7. สร้าง partition ในดิสก์ใหม่
sudo fdisk -l
จะเห็นว่าดิสก์ใหม่คือ /dev/sdb
sudo fdisk /dev/sdb
กดแป้น n, เลือกค่า default กดแป้น Enter เพื่อ (type,number,first,last), กดแป้น w
sudo mkfs.ext4 /dev/sdb1

8. ตรวจสอบ UUID ของดิสก์ใหม่
sudo blkid

9. ให้ ubuntu server ใช้ดิสก์ใหม่นี้ด้วย
เก็บไฟล์ไว้ก่อน
sudo cp /etc/fstab /etc/fstab.save
แก้ไข
sudo vi /etc/fstab
เพิ่มบรรทัด
UUID=หมายเลขของดิสก์ใหม่ /owncloud-data ext4 defaults 0 2

10. รีสตาร์ท server
sudo reboot

11. ย้าย data มาไว้ที่ดิสก์ใหม่
sudo mv /var/www/owncloud/data/ /owncloud-data/
sudo chown www-data:www-data /owncloud-data/data
sudo ln -s /owncloud-data/data/ /var/www/owncloud/data

12. ตรวจสอบว่าในไดเรกทอรี data จะต้องมีไฟล์ .htaccess (ระบบสร้างให้ตอนครั้งแรก)
ภายในมีข้อความ 1 บรรทัดดังนี้
Deny from all


(เลือกทำ) การสร้างพื้นที่ data ก่อนที่จะทำการติดตั้ง ownCloud ทางหน้าเว็บ (เข้าหน้าเว็บ ownCloud ครั้งแรก)
แบบที่1 การสร้างพื้นที่เก็บ data สำหรับ ownCloud โดยใช้ /home ที่มีอยู่
sudo mkdir /home/owncloud-data
sudo chown www-data:www-data /home/owncloud-data
sudo ln -s /home/owncloud-data/ /var/www/owncloud/data

แบบที่2 การสร้างพื้นที่เก็บ data สำหรับ ownCloud โดยใช้ดิสก์ /owncloud-data ต่างหาก
sudo mkdir /owncloud-data/data
sudo chown www-data:www-data /owncloud-data/data
sudo ln -s /owncloud-data/data/ /var/www/owncloud/data


(เลือกทำ) ตั้ง Cron ให้ owncloud
Using the systems cron feature is the preferred way to run regular tasks, because it allows to execute jobs without the limitations which a web server may have.

Example
To run a cron job on a nix system, e.g. every 15min, under the default webserver user, e.g. **www-data*, you need to set-up the following cron job to call the cron.php script. Please check the crontab man page for the exact command syntax.

# sudo crontab -u www-data -e
*/15 * * * * php -f /var/www/owncloud/cron.php


วิธีการแก้ไข Bug:
(1) owncloud.log
-rw-r--r-- 1 www-data www-data 409736 May 17 14:04 /var/www/owncloud/data/owncloud.log
จะพบว่ามีข้อความแจ้งเตือนทำนองว่า error แต่จริงๆแล้วทำงานได้ ข้อความว่า
{"app":"core","message":"User backend OC_User_FTP not found.","level":3,"time":1368774225}
ซึ่งเป็น bug ของโปรแกรม owncloud (คงต้องรอการแก้ไขใน version หน้า)

ทางแก้ไขที่อ่านจาก search google:
(ต้องทำ) แก้ไขไฟล์ base.php
cd /var/www/owncloud/lib/
sudo cp base.php base.php-orig
sudo vi base.php
ใส่คอมเม้นท์ 2 บรรทัดนี้ อยู่ที่บรรทัด 503,504
#Line503 //setup extra user backends
# OC_User::setupBackends();

(ต้องทำ) และแก้ไขไฟล์ app.php
cd /var/www/owncloud/apps/user_external/appinfo/
sudo cp app.php app.php-orig
sudo vi app.php
เติมบรรทัดนี้ต่อท้าย
บรรทัดอื่นๆ
OC_User::setupBackends();

ผลลัพธ์
sudo tail -f /var/www/owncloud/data/owncloud.log
เงียบไปแล้ว

(2) ส่วนนี้สำหรับ Android client จะอัฟโหลดรูปภาพ InstantUpload on android owncloud apps
(ต้องทำ) Here is how I did it:
Create the InstantUpload folder via the web interface in the root "/" of my ownCloud account.
Upload a picture to the InstantUpload folder via the web interface.
Test a manual upload from my Note to the InstantUpload folder (if you hadn't completed steps 1 and 2, it would fail telling you that the first time you had to be online, which is unfortunately not as clear as it needs to be).
Take a picture, and look at your notification shade to see it now uploading automatically.


ตรวจสอบ Log:
tail -f /var/log/syslog
tail -f /var/www/owncloud/data/owncloud.log
tail -f /var/log/apache2/error.log
tail -f /var/log/apache2/access.log
tail -f /var/log/apache2/other_vhosts_access.log

ผลลัพธ์เมื่อผู้ใช้งาน Share with link และ Email link to person หาก setup postfix ถูกต้อง
tail /var/log/syslog
May 21 14:19:33 server1 postfix/pickup[10257]: 1BB0242175: uid=33 from=<sharing-noreply@cloud.in.psu.ac.th>
May 21 14:19:33 server1 postfix/cleanup[11358]: 1BB0242175: message-id=<8f53a54b2a5cf9457bfcca26616a5dc4@cloud.in.psu.ac.th>
May 21 14:19:33 server1 postfix/qmgr[1694]: 1BB0242175: from=<sharing-noreply@cloud.in.psu.ac.th>, size=839, nrcpt=1 (queue active)
May 21 14:19:33 server1 postfix/smtp[11360]: 1BB0242175: to=<user1.a@psu.ac.th>, relay=smtp.psu.ac.th[192.168.100.195]:25, delay=0.35, delays=0.18/0.04/0.13/0.01, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 8A317631D1)
May 21 14:19:33 server1 postfix/qmgr[1694]: 1BB0242175: removed