Thursday, October 30, 2014

How To Set Up HTTP Authentication With Nginx On Debian 7 Wheezy

  • อยากได้แบบนี้หว่า แต่ก่อนใช้ apache มันทำง่ายมากๆ แล้ว Nginx มันจะง่ายเหมือนกันมั้ยหว่า
  • เค้าเรียกว่า

HTTP Authentication

  • ก่อนอื่นเครื่องเราต้องติดตั้ง Nginx ก่อนนะครับ โดยดูวิธีติดตั้งได้จากโพสนี้

Installing Nginx With PHP5 (And PHP-FPM) And MySQL Support (LEMP) On Debian Wheezy

  • เมื่อ Nginx เราพร้อมแล้วมาคอนฟิกกัน
Solved
Step 1: Apache Utils
  • เราจะใช้ htpasswd สำหรับสร้าง user และ password ที่เข้ารหัสนะ สำหรับ http authen นี้เลย โดยเราต้องติดตั้ง apache2-utils ก่อนจึงจะใช้งาน htpasswd ได้
sudo apt-get install apache2-utils
Step 2: Create User and Password
  • เราสามารถใช้พาธอื่น ที่ไม่ใช่พาธตามตัวอย่างนี้ก็ได้นะ และ ไฟล์เก็บ user และ passwd เราสามารถใช้ .mypasswd เพื่อซ่อนไฟล์นี้ด้วยก็น่าจะดี แต่ตัวอย่างนี้ ขอแสดงแบบง่ายๆ พอ
sudo htpasswd -c /etc/nginx/mypasswd myuser
  • มันจะขึ้นรอให้เรากรอกพาสเวิร์ดด้วย
New password:
Re-type new password:
Adding password for user myuser
  • โครงสร้างที่มีการเก็บบันทึกใน /etc/nginx/mypasswd จะได้ประมาณนี้
user:passwd_encryped
Step 3: Update Nginx configuration
  • คอนฟิก host เราซะหน่อย
sudo vi /etc/nginx/sites-available/myhost
  • เพิ่ม 2 บรรทัดนี้ เข้าไปใน config ของ site หรือ alias ที่เราต้องการใช้ http authen
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/mypasswd;
  • ในคอนฟิกโฮสเราจะได้ประมาณนี้ (เราสามารถนำ 2 บรรทัดนี้ไปวางไว้ใน alias ก็ได้นะ)
server {
  listen       portnumber;
  server_name  ip_address;
  location / {
      root   /var/www/mywebsite.com;
      index  index.html index.htm;
      auth_basic "Restricted";                                #For Basic Auth
      auth_basic_user_file /etc/nginx/.htpasswd;  #For Basic Auth

  }
}
Step 4: Restart Nginx
  • ตามอ้างอิงเค้าบอกให้ reload แต่เราจะ restart เลย
sudo /etc/init.d/nginx restart

อ้างอิง
  • ผู้โพสอ้างอิงบน Debian 7 Wheezy  แต่จากอ้างอิงบน เว็บ digitalocean เค้าอ้างอิงบน Ubuntu 12.10 นะครับพี่น้อง
  • https://www.digitalocean.com/community/tutorials/how-to-set-up-http-authentication-with-nginx-on-ubuntu-12-10
  • http://www.howtoforge.com/basic-http-authentication-with-nginx

Hiding the Nginx version number




Solved
sudo nano /etc/nginx/nginx.conf
  • go to about this statement
# server_tokens off;
  • and uncomment it and restart nginx
server_tokens off;
sudo service nginx restart
  • หรือถ้าเราต้องการแก้ error ไม่ให้แสดง nginx ด้วย อันนี้ก็ต้องใช้กำลังภายในเยอะกว่าเดิมหน่อย ตามลิ้งนี้เลย
อ้างอิง
  • https://www.virendrachandak.com/techtalk/how-to-hide-nginx-version-number-in-headers-and-errors-pages/
  • http://linux-audit.com/hiding-nginx-version-number/

Monday, October 27, 2014

Nginx 502 bad gateway

อ้างอิง
  • http://stackoverflow.com/questions/4252368/nginx-502-bad-gateway
  • http://juuier.blogspot.com/2014/10/installing-nginx-with-php5-and-php-fpm_22.html
ปัญหา
  • เปิดเว็บที่เขียนด้วย Joomla 1.5 เปิดลิ้งต่างๆ ดู หลายครั้งมันชอบขึ้น 502 Bad Gateway เป็นเรื่องที่น่าเบื่อมากๆ

Solved
เค้าบอกว่าให้ใช้ Socket แทน TCP หว่า
Making PHP-FPM Use A TCP Connection 
Note: ผู้เขียนไม่แนะนำให้คอนฟิก TCP ใช้ Socket แบบเดิมดีกว่า เพราะผู้เขียนลองใช้แบบ TCP ไปสักพักแล้วพบว่ามัน 502 Bad Gateway บ่อยมากเลย
อางอิง : https://rtcamp.com/tutorials/php/fpm-sysctl-tweaking/
  • By default PHP-FPM is listening on the socket /var/run/php5-fpm.sock. It is also possible to make PHP-FPM use a TCP connection. To do this, open /etc/php5/fpm/pool.d/www.conf...
vi /etc/php5/fpm/pool.d/www.conf
  • ... and make the listen line look as follows:
[...]
;listen = /var/run/php5-fpm.sock
listen = 127.0.0.1:9000
[...]
  • and config vhost nginx
vi /etc/nginx/sites-available/default
  • comment and uncomment follow this:
#fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
  • Finally restart php5 and nginx:
/etc/init.d/php5-fpm restart
/etc/init.d/nginx reload
  • คอนฟิกด้านบนนี้เป็นของโพสนี้ คือ เปลี่ยนจาก Socket ให้ไปใช้ TCP
  • แต่มันเกิดปัญหา 502 bad gateway ฉะนั้นให้เราแก้ไฟล์
  • /etc/php5/fpm/pool.d/www.conf และ vhost ของเราด้วย จากนั้น restart php5-fpm และ nginx ให้เรียบร้อย

Friday, October 24, 2014

Create alias path virtual host Nginx

Related
  • http://juuier.blogspot.com/2014/10/config-virtual-hosts-nginx-in-debian.html
  • http://juuier.blogspot.com/2014/10/installing-nginx-with-php5-and-php-fpm_22.html
Solved
  • modify vhost config
sudo nano /etc/nginx/sites-available/myhost.com
  • จากนั้นทำการเพิ่ม box location ของ alias ให้อยู่ภายใต้ box ของ vhost ดังตัวอย่างเช่น ใน default จะมี location /doc/ {...} อยู่ภายใน server {} ประมาณนั้น ให้เราประยุกแบบ /doc/
  • สมมุติต้องการสร้าง alias th เราต้องเพิ่ม location /th/ {...} จะได้ประมาณนี้
server {
listen   80; ## listen for ipv4; this line is default and implied
# listen   [::]:80 default_server ipv6only=on; ## listen for ipv6

root /media/www/home;
index index.php index.html index.htm;

# Make site accessible from http://localhost/
server_name myhost.com www.myhost.com;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.html;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}

location /doc/ {
alias /usr/share/doc/;
autoindex on;
allow 127.0.0.1;
allow ::1;
deny all;
}

location /th {
alias /path/to/th/;
autoindex on;
allow 127.0.0.1;
allow ::1;
deny all;

location ~ \.php$ {
        fastcgi_split_path_info ^(.+?\.php)(/.*)?$;
        # fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        }
}
}
  • สังเกตุว่าภายใน location /th/ {...} จะมี box location ~ \.php$ {...} ด้วย ซึ่งตัวอย่างของ location /doc {...} มันไม่มีนะ 
  • box location ~ \.php$ {...} ที่ต้องใส่ไว้ใต้ /th/ เพราะว่า ให้มันรัน PHP ด้วย ถ้าไม่ใส่อันนี้ภายในของ box location /th/ {...} ตัว alias /th/ นี้จะรัน PHP ไม่ได้เลย จะรันได้เฉพาะ myhost.com เท่านั้นเพราะภายใต้ server {...} ของ myhost.com จะมี box location ~ \.php${...} อยู่ด้วย
  • ข้อสังเกตุอีกอย่าง location /th{...} กับ location /th/ {...} ต่างกันนะครับ แนะนำให้ใช้แบบ /th เฉยๆ ไม่ต้องมี slash ต่อท้ายนะ
  • ถ้าเราตั้ง location /th/ {...} ตอนเราพิมพ์ url ใน browser ต้องพิมพ์ www.myhost.com/th/ คือ ต้องพิมพ์ slash ต่อท้ายด้วย ถ้าไม่พิมพ์ มันจะแสดง 500 Internal Server Error นะครับพี่น้อง 
  • แต่ถ้าเราสร้าง alias แบบ location /th เมื่อเราพิมพ์ url บน browser ทั้งสองแบบ myhost.com/th หรือ myhost.com/th/ มันก็จะเข้าเว็บได้เหมือนกัน ไม่มีปัญหาอะไรให้กวนใจครับ
  • หรือ ง่ายๆ ก็สร้าง sub เว็บภายใต้ root มันจะมีผลเหมือนเราสร้าง alias แบบ location /th {...} เลยง่ายกว่าสร้าง alias อีก แล้วเราจะทำให้มันยุ่งยากทำไมวะ
อ้างอิง
  • http://serverfault.com/questions/565425/nginx-alias-php-fpm-file-not-found

PHP-FPM: Socket vs TCP/IP and sysctl tweaking on Nginx Server

ที่มา : https://rtcamp.com/tutorials/php/fpm-sysctl-tweaking/

Tweaking FPM config
You may also need to tweak PHP-FPM config to match new sysctl.conf settings.
Open PHP-FPM pool config file:
vim /etc/php5/fpm/pool.d/www.conf
Look for line:
;listen.backlog = 128
Change it to:
listen.backlog = 65536
Restart php5-fpm service.
service php5-fpm restart
Using TCP/IP for FPM
Sockets are slightly faster as compared to TCP/IP connection. But they are less scalable by default.
If you start getting errors like below (as faced ovidiu here
connect() to unix:/var/run/php5-fpm.sock failed
or **apr_socket_recv: Connection reset by peer (104)**
Then it means you need to either switch to TCP/IP or tweak with linux-system parameter so that your OS can handle large number of connections.
Open PHP-FPM pool config file
vim /etc/php5/fpm/pool.d/www.conf
Replace line:
listen = /var/run/php5-fpm.sock
by line:
listen = 127.0.0.1:9000

Changes to Nginx

Next, open Nginx virtual-host config file(s).
Look for line
fastcgi_pass unix:/var/run/php5-fpm.sock;
Replace it with
fastcgi_pass 127.0.0.1:9000;
Important: Reload php-fpm and nginx so that changes can take effect.
service php5-fpm reload && service nginx reload

Wednesday, October 22, 2014

Installing LXDE+VNC desktop environment on your Ubuntu/Debian

Refer
  • http://www.vandorp.biz/2012/01/installing-a-lightweight-lxdevnc-desktop-environment-on-your-ubuntudebian-vps/#.VEf7DhC7Kl0
  • http://linuxpluse.wordpress.com/2013/01/13/remote-server-access-lxde-vnc/
Related
  • http://juuier.blogspot.com/2013/11/tunnelling-vnc-remote-over-ssh-on.html
Configuring TightVNC
  • Make sure Debian is the latest and greatest
apt-get update
apt-get upgrade
apt-get dist-upgrade
  • Install X, LXDE, VPN programs
apt-get install xorg lxde-core lxde-icon-theme tightvncserver
  • Start VNC to create config file (this command it show prompt for input new password vnc)
tightvncserver :1
  • Then stop VNC
tightvncserver -kill :1
  • Edit config file to start session with LXDE:
nano ~/.vnc/xstartup
  • Add this at the bottom of the file:
lxterminal & /usr/bin/lxsession -s LXDE &
  • If we want to change password again for vnc remote with this command
vncpasswd
  • Restart VNC
tightvncserver :1
  • You then connect using the VNC viewer of your choice on your local computer. I use the "VNC Free Edition Viewer for Windows Stand-Alone Viewer" at: http://www.realvnc.com Configure the viewer to access your VPS at: xxx.xxx.xxx.xxx:5901.
Run tightvncserver at startup
nano /etc/init.d/tightvncserver
  • add content :
#!/bin/sh
### BEGIN INIT INFO
# Provides: tightvncserver
# Required-Start: $local_fs
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start/stop tightvncserver
### END INIT INFO
# More details see:
# http://www.penguintutor.com/linux/tightvnc
### Customize this entry
# Set the USER variable to the name of the user to start tightvncserver under
export USER=’
root
### End customization required
eval cd ~$USER
case “$1″ in
start)
su $USER -c ‘/usr/bin/tightvncserver :1′
echo “Starting TightVNC server for $USER “
;;
stop)
pkill Xtightvnc
echo “Tightvncserver stopped”
;;
*)
echo “Usage: /etc/init.d/tightvncserver {start|stop}”
exit 1
;;
esac
exit 0
  • และเพิ่มให้เค้ารันตอนบูตระบบด้วยคำสั่งประมาณนี้
sudo chmod 775 /etc/init.d/tightvncserver
sudo update-rc.d tightvncserver defaults
  • Now next time you boot it will automatically runs tighvncserver
Update: To run application in LXDE as startup app, copy your application.desktop file (usually its in your desktop, otherwise make one by going to menu and right click on application and “add to desktop”) to [user]/.config/autostart
Tunnelling through SSH (make sure tunneling is allowed in ssh config) 
ssh -l user -p [ssh port usually 22] -L5901:localhost:5901 serverIp 
Example (in client terminal) :  
ssh -l root -p 22 -L5901:localhost:5901 10.10.0.1
goto vnc client and put localhost:5901

Iceweasel : Installing Adobe Flash player plugin Debain Wheezy

  • ประเด็นมีอยู่ว่า ใช้ Debain 7 Wheezy 64 bit แล้ว Iceweasel มันไม่สามารถเล่น flash ของเว็บบางเว็บได้
  • มันก็ขึ้นปุ่มให้ Install เมื่อกดแล้วมันก็ลิ้งไปที่ เว็บของ adobe เค้าเพื่อเลือก package สำหรับ OS เรา มันมีให้เลือกประมาณนี้ .rpm และ .deb(Ubuntu 10.04) และ tar.gz เราก็เลือกแบบ .deb ดิ แต่มันก็ติดตั้งบ่ได้อยู่ดี สุดท้ายจริงเลือก tar.gz มาแล้วอ่าน guide ดูแล้วงงกับ plugins ของ browser Iceweasel เรามันอยู่ที่ใหนหว่า
Solved
  • ดาวน์โหลด install_flash_player_11_linux.x86_64.tar.gz
  • แตกไฟล์ซะ เราจะได้ไฟล์ libflashplayer.so กับ readme.txt และ folder ชื่อ usr
  • ใน readme.txt เค้าบอกให้เรา copy libflashplayer.so ไปวางภายใต้ plugins ของ browser ระบบของเรา ซึ่งก็คือ Iceweasel
  • Debian 7 พาธของเราจะอยู่ประมาณนี้เลย ~/.mozilla/
  • แต่มันจะไม่มี folder ชื่อ plugins นิ มีแต่ folder ชื่อ firefox กับ extensions หว่า
  • ทำไงดีล่ะ งั้นก็ create folder เอาเองซะเลย
mkdir ~/.mozilla/plugins
  • ทำการคัดลอกไฟล์ libflashplayer.so ไปไว้ที่ folder ที่เราพึ่งสร้างขึ้นตะกี้
cp libflashplayer.so ~/.mozilla/plugins/
  • สุดท้ายคัดลอก folder usr ที่เราได้แตกไฟล์ tar.gz ออกมาก่อนหน้านี้ ด้วยคำสั่ง
sudo cp -r usr/* /usr
  • ปิดและเปิด Iceweasel อีกรอบเป็นอันเรียบร้อยใช้ได้เลยแฮะ
เพิ่มเติม
  • อันนี้น่าจะใช้ได้เฉพาะ user นะคิดว่าเพราะมันคัดลอกไว้สำหรับ mozilla ของ user เท่านั้นหว่า
อ้างอิง
  • Debian 7 Wheezy 64 bit นะครับที่ใช้ทดสอบของโพสนี้
  • readme.txt ของไฟล์ที่โหลดมานี่แหละ
  • https://wiki.debian.org/Iceweasel
  • http://www.linuxforums.org/forum/debian-linux/151175-iceweasel-installing-adobe-flash-player-plugin.html

Setup Virtual Hosts Nginx in Debian Wheezy

  • ความเดิมตอนที่แล้ว config nginx + php5 + mysql
  • ได้แค่ default แต่เราจะทำ host แบบ domain name หลายตัวใน server เครื่องนี้ซึ่งมี 1 public ip ครับพี่น้อง
Solved
  • ขั้นตอนแรก ติดตั้ง nginx จาก โพส  config nginx + php5 + mysql ให้เรียบร้อยก่อนนะ
  • Config Virtual Hosts Nginx in Debian Wheezy
  • สร้าง vhost ใหม่โดยคัดลอกคอนฟิกจาก default
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/myhost.com
  • แก้คอนฟิก myhost.com
sudo nano /etc/nginx/sites-available/myhost.com
  • หาคำว่า server {...} บ๊อกแรกเลย ที่ตำแหน่ง server_name คำต่อท้ายจะเป็น localhost ให้เราแก้ตรงนี้แหละเป็น myhost.com
  • และ ที่ตำแหน่ง root แก้พาธของ myhost.com เราได้เลยว่า จะให้ root ไปอยู่ที่พาธใหนในระบบนี้
  • และ ที่ตำแหน่ง index อย่าลืมเพิ่ม index.php ให้เป็นค่าเริ่มต้นสำหรับโหลดตอนเข้าเว็บ
  • ส่วนคอนฟิกอื่นๆ ที่มันมากลับ default อยู่แล้ว ก็ไม่ต้องทำไรมันหรอก ปล่อยไว้ยังงั้นแหละ
server {
    listen   80; ## listen for ipv4; this line is default and implied
    #listen   [::]:80 default_server ipv6only=on; ## listen for ipv6

    root /usr/share/nginx/www;
    index index.php index.html index.htm;

    # Make site accessible from http://localhost/
    #server_name localhost;
    server_name myhost.com www.myhost.com;

[...]
location ~ \.php$ {
             try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
             fastcgi_pass 127.0.0.1:9000;  # ในกรณีทีเราคอนฟิก PHP-FPM ใช้เป็น TCP/IP
             #fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
        }
[...]  
}
  • และบันทึกไฟล์ /etc/nginx/sites-available/myhost.com ให้เรียบร้อย
  • ทำการสร้างลิ้งให้ myhost.com ให้ไปอยู่ใน site-enabled folder (มัน enable ง่ายกว่า apache แฮะ)
sudo ln -s /etc/nginx/sites-available/myhost.com /etc/nginx/sites-enabled/myhost.com
  • จากนั้นเมื่อแก้ไขคอนฟิกของ vhost เสร็จแล้ว รีสตาร์ทสักรอบสิ
sudo service nginx restart
  • จากนั้นทดสอบ myhost.com ของเรา โดยแก้ไข /etc/hosts
sudo vi /etc/hosts
  • เพิ่มประมาณนี้เข้าไป 127.0.0.1 myhost.com
127.0.0.1    localhost
127.0.1.1    my-server.com    my-server
127.0.0.1    myhost.com
  • ทำการบันทึกไฟล์ให้เรียบร้อย ทดสอบสิครับทีนี้ http://myhost.com
เพิ่มเติม
  • server_name myhost.com www.myhost.com; แบบนี้พอได้
  • แต่แบบนี้ลองแล้วใช้บ่ได้เลย server_name *.myhost.com;
อ้างอิง
  • https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-virtual-hosts-server-blocks-on-ubuntu-12-04-lts--3
  • http://blogs.reliablepenguin.com/2013/05/23/serveralias-on-nginx
  • https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual-hosts-on-ubuntu-14-04-lts

Installing Nginx With PHP5 (And PHP-FPM) And MySQL Support (LEMP) On Debian Wheezy

Installing MySQL
apt-get install mysql-server mysql-client
Installing Nginx
apt-get install nginx
/etc/init.d/nginx start
Installing PHP5 - PHP-FPM (FastCGI Process Manager)
apt-get install php5-fpm
apt-cache search php5
apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
apt-get install php-apc
/etc/init.d/php5-fpm restart
Configuring Nginx
vi /etc/nginx/nginx.conf
  • First (this is optional) adjust the number of worker processes and set the keepalive_timeout to a reasonable value:
  • keepalive_timeout 65; => keepalive_timeout 2;
[...]
worker_processes  4;
[...]
keepalive_timeout   2;
[...]
Configuring Virtual Hosts Nginx (default)
vi /etc/nginx/sites-available/default
  • uncomment at line abou:
listen   80; ## listen for ipv4; this line is default and implied
  • add default php file by add index.php to this line:
index index.php index.html index.htm;
  • uncomment and add "try_files $uri =404;" at box "location ~ \.php$":
  • line "try_files $uri =404;" to prevent zero-day exploits (see http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP and http://forum.nginx.org/read.php?2,88845,page=3).
location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

                # With php5-cgi alone:
                #fastcgi_pass 127.0.0.1:9000;
                # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
  • Now save the file and restart nginx:
/etc/init.d/nginx restart
  • test nginx http://localhost

Configuring PHP5
vi /etc/php5/fpm/php.ini
  • and set ";cgi.fix_pathinfo=1" => "cgi.fix_pathinfo=0"
[...]
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]
  • and restart PHP-FPM
/etc/init.d/php5-fpm restart
Test Nginx + PHP5 + MySQL
vi /usr/share/nginx/www/info.php
  • and add this content
<?php phpinfo(); ?>
  • test open browser and type http://localhost/info.php


Making PHP-FPM Use A TCP Connection 
Note: ผู้เขียนไม่แนะนำให้คอนฟิก TCP ใช้ Socket แบบเดิมดีกว่า เพราะผู้เขียนลองใช้แบบ TCP ไปสักพักแล้วพบว่ามัน 502 Bad Gateway บ่อยมากเลย
อางอิง : https://rtcamp.com/tutorials/php/fpm-sysctl-tweaking/
  • By default PHP-FPM is listening on the socket /var/run/php5-fpm.sock. It is also possible to make PHP-FPM use a TCP connection. To do this, open /etc/php5/fpm/pool.d/www.conf...
vi /etc/php5/fpm/pool.d/www.conf
  • ... and make the listen line look as follows:
[...]
;listen = /var/run/php5-fpm.sock
listen = 127.0.0.1:9000
[...]
  • and config vhost nginx
vi /etc/nginx/sites-available/default
  • comment and uncomment follow this:
#fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
  • Finally restart php5 and nginx:
/etc/init.d/php5-fpm restart 
/etc/init.d/nginx reload
Configuring CGI/Perl Scripts
  • If you want to serve CGI/Perl scripts with nginx, please read this tutorial: Serving CGI Scripts With Nginx On Debian Squeeze/Ubuntu 11.04
  • http://www.howtoforge.com/serving-cgi-scripts-with-nginx-on-debian-squeeze-ubuntu-11.04
ที่มา : 
  • http://www.howtoforge.com/installing-nginx-with-php5-and-php-fpm-and-mysql-support-lemp-on-debian-wheezy
    https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-12-04
    http://www.sitepoint.com/setting-up-php-behind-nginx-with-fastcgi/

Tuesday, October 14, 2014

อาการแปลกๆ ของ USB Port PC All in One Lenovo


  • รุ่น Lenovo IdeaCentre C360 All in One 
  • อาการแปลกคือ หลายๆ เครื่องที่ต่อกับปริ้นเตอร์ผ่านสาย USB
  • สำหรับเครื่องที่ติดตั้งไดรเวอร์แล้ว และได้ติดตั้ง deepfreeze ด้วยบางครั้ง สถานะเครื่องปริ้นเตอร์ก็ offline ทั้งๆ ที่สาย USB ยังเชื่อมต่อ และปริ้นเตอร์ยังเปิดอยู่ แต่พอ disable deepfreeze แล้ว restart ปริ้นเครื่องนั้นก็กลับมา online เหมือนเดิม ตอนแรกเค้าใจว่าเป็นกับ deepfreeze
  • ลองใช้ HDGuard ก็เป็นเหมือนกันแฮะ บางครั้งนะ
  • หรือ อีกประเด็นคือ เครื่องนั้นไม่มี deepfreeze นะ และไม่มี recovery program อื่นๆด้วย แต่ติดตั้ง driver ปริ้นเตอร์ brother ไม่ได้เลย อาการเหมือน ไม่พบ Device ตัวนั้นทำให้ไม่สามารถลง driver ได้เลย ลองเปลี่ยน port USB ด้านหลังเครื่องเสียบทุก port แล้วก็ยังไม่เจอ
  • พอลองเปลี่ยนมาเสียบกับ port USB 3.0 ซึ่งอยู่ด้านข้างเครื่อง All-in-One มันพบ device ซะงั้น งง
สรุป
  • จากอาการข้างบนที่แจ้งมา
  • Lenovo น่าจะมีปัญหากับ port USB 2.0
  • เคสแรกเรื่องปริ้นมัน offline เอง เป็นหลายๆ เครื่องอยู่
  • แต่เคสที่สองที่ติดตั้ง driver ไม่ได้ อาการคือ ไม่พบ device ที่มันเชื่อมต่อด้วย USB cable อยู่ ยังพบแค่เครื่องเดียว

How to solve this "Checking for corrupt, not cleanly closed and upgrade needing table

ที่มา - http://ubuntuforums.org/showthread.php?t=1361506


  • สั่ง start mysql แบบนี้

user@host:/etc/mysql$ sudo service mysql startStarting MySQL database server: mysqld.Checking for corrupt, not cleanly closed and upgrade needing tables..
  • เค้าบอกว่ามันไม่ใช่ error หรือ อะไรหรอก เป็นแค่ feedback เฉยๆ
------------------------------------------------------
Hello, someone said "It's not an error! It's just mysqld telling you what it is doing .." see http://ubuntuforums.org/showthread.php?t=598657 HTH

------------------------------------------------------
Or maybe /var/log/syslog could clear things up?

grep mysql /var/log/syslog | less
------------------------------------------------------

It is not an error.

Feedback when starting a service is good.

If you don't want feedback redirect STDOUT and STDERR to /dev/null/

Thursday, October 9, 2014

mysqldump: Got error: 144: Table './db_name/table_name' is marked as crashed ...

mysqldump: Got error: 144: Table './db_name/table_name' is marked as crashed and last (automatic?> repair failed when using LOCK TABLES
Solved
  • logon to mysql and resolved by command
mysql > repair table table_name
อ้างอิง
  • http://stackoverflow.com/questions/8843776/mysql-table-is-marked-as-crashed-and-last-automatic-repair-failed

Change Fedora Hostname

ที่มา - http://www.labtestproject.com/using_linux/permanently_change_hostname_on_fedora

Change Fedora Hostname for current session.

   On the installation process of Fedora, you named you Fedora machine.  Then one Monday morning you decide to change the hostname to something else.  The step by step procedure below show the simples way to change hostname on Fedora machine temporary.

1.  Display your fedora box hostname by execute the hostname command.
[root@localhost ~]# hostname
localhost.localdomain

2.  To change Fedora hostname execute the hostname command as example below.
[root@localhost ~]# hostname fedora.labtestproject.com

Please note: That with the hostname command, the hostname only for the session only... the hostname reset back to the previous state after you reboot the system.
Change Fedora hostname permanently.

   On Fedora, to change the hostname permanently you need to edit the network configuration files.  The step below show the way to change hostname by using network configuration tools, and then verify the changes on the hostname configuration files.

1.  Backup the network configuration files:
[root@localhost ~]# cp -pr /etc/sysconfig/network /etc/sysconfig/network.bak

2.  Display the hostname configuration file:
[root@localhost ~]# cat /etc/sysconfig/network
NETWORKING=yes 
HOSTNAME=localhost.localdomain 

3. Modify hostname
[root@localhost ~]# vi /etc/sysconfig/network
NETWORKING=yes 
HOSTNAME=newhostname 

4. Reboot fedora

How to list all of a users groups in Ubuntu

ที่มา - http://machiine.com/2013/how-to-list-all-of-a-users-groups-in-ubuntu/
  • If you need to see all of the groups assigned to a user simply type the following into the Terminal:
groups username
  • To display all the groups on your Ubuntu system just type:
groups

เพิ่ม Group ที่มีอยู่ให้ User ubuntu


  • มี user ชื่อ guest อยู่ group ชื่อ guest อยากให้ guest อยู่ใน group www-data ด้วยทำไงดี

Solved
sudo usermod -a -G www-data guest
หรือ
sudo adduser guest www-data
อ้างอิง

  • http://askubuntu.com/questions/79565/add-user-to-existing-group

Limiting Access with SFTP Jails on Debian and Ubuntu

Configure OpenSSH
  • แก้ไขไฟล์ /etc/ssh/sshd_config (ก่อนแก้ไขก็สำรองไว้ก่อนนะครับ)
  • vi /etc/ssh/sshd_config
  • หาคำว่าบรรทัดที่ขึ้นต้นด้วยคำประมาณนี้ Subsystem sftp ถ้ามันไม่มีก็เพิ่มเข้าไปได้เลย
Subsystem sftp internal-sftp
  • จากนั้นก็เพิ่มค่าเล่านี้ไว้ต่อจากบรรทัดสุดท้ายของไฟล์ sshd_config นี้ (ในที่นี้บรรทัดสุดท้ายผมคือ UsePAM yes เราก็เพิ่มค่าด้านล่างนี้ต่อท้ายบรรทัดนี้แหละ
Match group filetransfer    
ChrootDirectory %h    
X11Forwarding no    
AllowTcpForwarding no    
ForceCommand internal-sftp
  • จากนั้นทำการ save ไฟล์ให้เรียบร้อย และ รีสตาร์ท service ssh ให้เรียบร้อยซะ
sudo service ssh restart
 Modify User Accounts
  • ขั้นแรกให้เราเพิ่ม group ในระบบ Linux เราก่อน เพราะเราจะจัดการ user ประเภทนี้ได้ง่าย
  • ในที่นี้จะเพิ่ม group ชื่อ filetransfer
sudo addgroup --system filetransfer
  • จากนั้นเราจะมาปรับแต่ค่าให้ user ที่จะถูกจำกัดให้เข้าได้เฉพาะ home ของตัวเอง ในที่นี้จะสมมุติให้ user ที่จะโดนจำกัดสิทธิ์ชื่อ bob เพิ่ม user โดยคำสั่ง
sudo adduser bob
  • ใน /home ของระบบก็จะได้ /home/bob ขึ้นมา
  • จากนั้นกำหนดสิทธิ์ดังนี้
sudo usermod -G filetransfer bob
sudo chown root:root /home/bob
sudo chmod 755 /home/bob
  • ต่อมาเราต้องสร้าง folder เริ่มต้นไว้ใต้ /home/bob/ เพราะ bob จะไม่มีสิทธิ์ทำอะไรภายใต้ /home/bob/ ได้เลย ทำได้เพียงภายใต้ /home/bob/subfolder ที่เรากำลังจะสร้างไว้ให้เท่านั้น
cd /home/bob
sudo mkdir docs public_html
sudo chown bob:filetransfer *
  • เสร็จแล้วครับ ผู้เขียนทดสอบโดยใช้ winscp login ด้วย bob เข้าไปดู ที่ debian 6 squeeze 
  • การตั้งค่านี้ใช้ได้ครับ และใช้ได้แค่ sftp ด้วยแหละ scp หรือ ssh ไม่สามารถใช้งานได้ด้วยแหละเยี่ยมจริงๆ
อ้างอิง
  • https://www.linode.com/docs/tools-reference/tools/limiting-access-with-sftp-jails-on-debian-and-ubuntu
  • http://stackoverflow.com/questions/24646964/sftp-with-ssh-restrict-access-to-home-directory-form-only-some-users
  • http://askubuntu.com/questions/134425/how-can-i-chroot-sftp-only-ssh-users-into-their-homes

ปัญหาระหว่าง เบอร์มือถือ True กับ Google 2 Step verify


  • ปัญหาระหว่าง เบอร์มือถือ True กับ Google 2 Step verify
  • ประเด็นดังหัวข้อโพส คือ ใช้กับ DTAC ไม่มีปัญหาแต่จะทำ backup phone ไปอีกเบอร์
  • ซึ่งอีกเบอร์คือ True แต่ไง๋ SMS ไม่เข้าซะงั้น
  • ใครเป็นเหมือนกันมั่งนิ

Wednesday, October 8, 2014

Install ATI Radeon driver on Windows 8.1 manual

  • ประเด็นมีอยู่ว่า ติดตั้ง Windows 8.1 แล้ว ลง driver การ์ดจอ บ่ได้สักที
  • ทั้งที่ก่อนหน้านี้มันลงได้นะ กับ 8.1 นี่แหละ
  • เราก็ไปดาวน์โหลด จาก AMD เว็บไซต์เค้าเลยนะ ตรงรุ่น series ด้วย
  • แต่ไง๋ติดตั้งแล้ว มันไม่ complete ซะงั้น (มันขึ้นว่า complete นะ แต่มี warning ซะงั้น)
  • (warnings occured during installation)
  • แถมคลิกขวาที่หน้าจอแล้วมันยังรันไม่ขึ้นด้วย Catalyst Control Center cannot be started.
Solved
  • จากอ้างอิง เค้าแนะนำให้ติดตั้งแบบ manual เลยครับพี่น้อง
  • ขั้นแรกเราต้องไปโหลด driver ให้ตรงรุ่นของ การ์ดจอเราก่อน โดยเปิด Google แล้ว Search คำว่า AMD Driver
  • คลิกผลลัพธ์ ที่ลิ้งบนสุดได้เลย
  • ในที่นี้ผู้เขียนใช้ ASUS F81S series การ์ดจอจะเป็นรุ่น ATI Radeon HD 4570 GRAPHICS 512 MB อยู่ และหา driver สำหรับ Windows 8.1 64 bit ครับพี่น้อง ก็จะเลือกแต่ละ step ประมาณนี้ เมื่อเลือกได้แล้วคลิก DISPLAY RESULT เพื่อแสดงผลลัพธ์
  • ผลลัพธ์ตามภาพจะมีรุ่น stable คือ 13.1 และ beta เป็น 13.4 แนะนำเลือกดาวน์โหลดแบบ stable ดีกว่า
  • ดาวน์โหลดมาแล้วก็ติดตั้งให้เรียบร้อย ตอนติดตั้งในแต่ละหน้าเลือกค่าเริ่มต้นไปเลย
  • เมื่อเราติดตั้ง driver ที่เป็น exe เรียบร้อยแล้ว มันยังจะใช้ driver manager ไม่ได้นะ
  • ต่อไปนี้แหละ เราต้องติดตั้ง ATI Driver แบบ manual ตามหัวข้อโพสนี้แหละ
  • โดยให้เราคลิกขวาที่ This PC เลือก Manage เมนู tree ทางด้านซ้ายเลือก Device Manage รายการทางด้านขวาเลือก Display adapters และคลิกขวาที่ ATI ... เลือก Update Driver Software...
  • เลือกที่ Browse my computer for driver software
  • เลือก Let me pick form a list of device drivers on my computer
  •  คลิกที่ปุ่ม Have Disk... (ในที่นี้ capture ภาพตอน add driver เข้าระบบแล้ว ทำให้พบ driver ของ AMD)
  • ตามพาธนี้ไป C:\AMD\Support\13.1-legacy...\Packages\Driver\Display\W86A_INF\ 
  • เลือก ไฟล์ .inf ยังไงไม่รู้แต่ผู้เขียนขอเลือกรายการแรกเลยคือ C7160540.inf เลือกเสร็จกดปุ่ม Open
  • เมื่อ Open เสร็จแล้วเราจะได้หน้าต่างประมาณภาพด้านล่างนี้ รายการแรก เป็น driver ที่มาพร้อมกับ Windows 8.1 แต่เราจะใช้รายการที่ 2 นะครับพี่น้อง ATI Mobility Radeon HD 4500/5100 Series
  • เลือก ATI Mobility Radeon HD 4500/5100 Series แล้วคลิกปุ่ม Next มันก็จะทำการติดตั้ง driver สู่ระบบ Windows 8.1 ให้เราเรียบร้อย เรา
  • ตอนแรกที่ติดตั้ง driver จาก .exe ไฟล์ ที่ notify icon จะไม่มี icon ATI Manager ตัวนี้เลย แต่พอติดตั้งแบบ manaul แล้วเราได้ icon ATI Manager เฉยเลย
อ้างอิง
  • http://www.overclock.net/t/1414916/amd-display-driver-failing-to-install-solved/10

Friday, October 3, 2014

Reset root password Fedora 13

ที่มา - http://fedoraproject.org/wiki/How_to_reset_a_root_password
Solved
  • วิธีแก้ปัญหาผู้เขียนเลือกใช้ Rescure Mode -> Using GRUB legacy
  • เมื่อเราถึงหน้าที่แสดง list รายการของ Grub ให้เรากดปุ่ม e
  • จากนั้นเลื่อนลูกศรลงไปที่บรรทัดมีคำว่า kernel ขึ้นต้น
  • จากนั้นกดปุ่ม E ครับพี่น้อง
  • เติมคำว่า single หรือเลข 1 ต่อท้ายบรรทัดที่แสดงอยู่ดังภาพตัวอย่างให้เว้นวรรคก่อนเติม 1 หรือ single ด้วยนะครับ
  • และกดปุ่ม Enter เพื่อทำให้ค่าที่เราเปลี่ยนแปลงเกิดผล มันจะกลับไปก่อนหน้านี้อีกรอบ (หน้าที่มีบรรทัดที่ขึ้นต้นด้วย kernel อยู่นั่นแหละ)
  • สุดท้ายให้เรากดปุ่ม B เพื่อเข้า Rescure Mode ครับพี่น้อง
  • เมื่อเราได้สิทธิ์ root แล้ว ให้เราทำการเปลี่ยน password โดยใช้คำสั่ง
# passwd newpass
ต้นฉบับตามด้านล้างนี้เลย

Entering Rescue Mode

Using GRUB legacy

Note.png
GRUB legacy was the default boot loader up until Fedora 15.
While your system is starting up, hold down the Ctrl key or Esc to see the boot loader menu. After you see the menu:
  • Use the arrows to select the boot entry you want to modify.
  • Press e to edit the entry.
  • Use the arrows to go to kernel line.
  • Press a or e to append this entry.
  • At the end of the line add the word single or the number 1.
  • Press Enter to accept the changes.
  • Press b to boot this kernel.
A series of text messages scrolls by and after a short time, a root prompt appears awaiting your commands (#).

Using GRUB2

Note.png
GRUB2 has been the default boot loader since Fedora 16.
While booting the system the GRUB2 menu will be displayed, to boot the system using bash follow these steps:
  • Use the arrow keys to select the boot entry you want to edit
  • Press e to start editing that entry
  • Use the arrow keys to go to the line that starts with linux or linux16
    • If you have a UEFI system it's the line that starts with linuxefi
  • Go the the end of that line add a space then rw then another space and init=/bin/bash
  • Press Ctrl-x or F10 to boot that entry

Note.png
Encrypted partitions 
Whichever GRUB version your system has, if you have an encrypted partition, you are prompted for the pass phrase before mounting the filesystems. If have more than one encrypted partition and they all share a global pass phrase, select the option for global pass phrase. Otherwise, enter the pass phrase separately for each partition.

Changing root password

As root, changing password does not ask for your old password. Run the command:
# passwd
Enter your new root password twice. Congratulations! You now have now reset your root password.
To make sure that selinux context of file which were now modified is restored properly after reboot, run:
# touch /.autorelabel
You can than reboot the machine with
# /sbin/reboot -f

Reset Password Using a Fedora CD/DVD

Note.png
Usage cases
This method should work to reset the root password if the boot loader is password protected. Or if you have a Fedora 19 (or newer) installation where booting to the rescue mode (which now invokes /sbin/sulogin) will ask you for the root password to proceed.

Using the Fedora DVD (non-Live media)

  1. Boot from the install or rescue CD/DVD.
  2. Select "Rescue installed system."
  3. Answer the prompts for language and keyboard. Starting the network is optional and not needed.
  4. Let the rescue mode mount your file systems in the read/write mode.
  5. Hit Enter to get the shell prompt.
  6. At the prompt, enter the following commands. Do not enter any # mark or the text following it. These comments are shown for explanatory purposes only.
    chroot /mnt/sysimage   # Change to your disk file system
    passwd                 # Change the root password
    exit                   # Exit the chroot environment
    exit                   # Exit the rescue mode
The system now unmounts the file systems and reboots.

Using any of the Fedora Live Media

  • Boot the Live installation media
  • After it finishes booting and starts the live session, open a terminal and switch to root (using su, it won't ask for a password)
  • Create a directory where you can mount the filesystem of your installation:
mkdir /mnt/sysimage
  • Mount the filesystem of your installation (/dev/sda1 is just an example, be sure to fill in the actual device node of your installation root / partition):
mount /dev/sda1 /mnt/sysimage
  • chroot to your installation:
chroot /mnt/sysimage/
  • Change the root password:
passwd
  • Exit from the chroot:
exit
That's it, simply reboot your system and then boot the installation from the HDD as usual.

Reset Password When BIOS is Password Protected

If you cannot enter rescue mode because you forgot the BIOS password required to select an alternate boot device, you have three options:
  • Refer to your computer's documentation for instructions on resetting the BIOS password in CMOS memory, usually by moving a physical jumper.
  • Physically change the boot order.
  • Temporarily move the system hard disk to another machine, and follow the procedures above to reset the root password.