วันอังคารที่ 26 พฤศจิกายน พ.ศ. 2556

การแก้ปัญหาลืมรหัสผ่าน Root ของ CentOS Linux ด้วย Single Mode

1. บู๊ตเครื่องเข้าระบบใหม่
2. กดปุ่ม Esc 1 ครั้ง
กดปุ่ม ESC เพื่อเข้าหน้า Boot


3. กดปุ่ม e เพื่อเข้าหน้าคอนโซลลีนุกซ์
4. เลื่อนลงมาที่บรรทัด kernel /vmlinuz-2.6.32-279.el6.x86_64 ro /root=/dev/mapper/...

กดปุ่ม e เพื่อแก้ไขคำสั่ง
5. กดปุ่ม e อีกครั้งเพื่อเข้าไปแก้ไขข้อมูล
6. กดปุ่ม spacebar เว้นว่างหนึ่งครั้ง
แล้วพิมพ์คำว่า single เสร็จแลดกดปุ่ม <Enter>
เว้นวรรคแล้วพิมพ์คำว่า single ต่อท้ายบรรทัด kernel /vmlinuz..... single
7. กดปุ่ม b เพื่อบู๊ตเข้าระบบแบบ Single Mode
หลังจากที่พิมพ์คำว่า single เสร็จแล้วให้กดปุ่ม b เพื่อทำการบู๊ตโหมด  Single
8. เข้าระบบแบบ Single mode สังเกตุจะเข้ามาถึงหน้าคอนโซลของ Root ( root promt) ให้พิมพ์แก้รหัสผ่านของ root ด้วยคำสั่ง
    # passwd root [enter] 
    แล้วใส่รหัสผ่านที่ต้องการลงไป
เข้า Single Mode สำเร็จจะปรากฏ Root prompt 
9. เมื่อเปลี่ยนรหัสผ่านสำเร็จแล้วให้ทำการรีบู๊ตเครื่องด้วยคำสั่ง 
    # reboot




Write by A.Arnut Ruttanatirakul
ที่มา:  http://www.arnut.com/bb/node/129

เปลี่ยนโหมดการใช้งานแบบ GUI เป็น Text Mode

1. Login ด้วย Super user แล้วเข้าใช้งาน Terminal 
2. ขอเข้าใช้ระบบในฐานะ root ด้วยคำสั่ง
    # su root [enter] 
    # passwd : xxxxx [enter] < ป้อนรหัสผ่านรูท
3. แก้ไขไฟล์ inittab ด้วยคำสั่ง
    # vi /etc/inittab [enter] 
    หลังจากนั้นให้แก้ไขหมายเลข 5 เป็นเลข 3
4. สั่งรีบู๊ตระบบ 
    # reboot [enter]
ปล. กรณีต้องการเข้าหน้าต่าง X Windows ภายหลัง ให้พิมพ์คำสั่งผ่านTerminal 
    # startx [enter]

วันศุกร์ที่ 15 มีนาคม พ.ศ. 2556

Django Web Frame Work On CentOS


Install Apache, MySQL and miscellaneous tools

[irakli@django ~]$ sudo yum install httpd-devel mysql mysql-server mysql-client mysql-devel apr-devel
[irakli@django ~]$ sudo yum install openssl mod_ssl crypto-utils
[irakli@django ~]$ sudo yum install libjpeg libpng gcc make autoconf telnet libxslt gettext
[irakli@django ~]$ sudo yum install bind bind-utils bind-devel
[irakli@django ~]$ sudo yum install zlib-devel
[irakli@django ~]$ sudo yum install postfix # I like postfix over sendmail
  • Make sure your /etc/httpd/conf/httpd.conf includes a line like:\
    Include conf.d/*.conf
    
  • sudo mkdir /var/www/default
  • sudo vi /etc/httpd/conf.d/00_default.virtualhost.conf in there enter:\
    NameVirtualHost *:80
    
    <VirtualHost *:80>
        DocumentRoot /var/www/default
        ServerName _default_
        ErrorLog logs/default-error_log
        CustomLog logs/default-access_log common
    </VirtualHost>
    
  • sudo vi /var/www/default/index.html\ in there enter your default message for misconfigured hosts:
    Default blank page
    

Upgrading Python

[irakli@django ~]$ python -V
Python 2.4.3
[irakli@django ~]$ cd ~/
[irakli@django ~]$ mkdir src
[irakli@django ~]$ cd src
[irakli@django src]$ wget http://www.python.org/ftp/python/2.6.4/Python-2.6.4.tgz
[irakli@django src]$ tar xzvf Python-2.6.4.tgz
[irakli@django src]$ cd Python-2.6.4
[irakli@django Python-2.6.4]$ ./configure --prefix=/opt/python2.6 --with-threads --enable-shared --with-zlib=/usr/include
[irakli@django Python-2.6.4]$ make
[irakli@django Python-2.6.4]$ sudo make install
[irakli@django Python-2.6.4]$ sudo ln -s /opt/python2.6/lib/libpython2.6.so /usr/lib
[irakli@django Python-2.6.4]$ sudo ln -s /opt/python2.6/lib/libpython2.6.so.1.0 /usr/lib
[irakli@django Python-2.6.4]$ sudo /sbin/ldconfig -v
[irakli@django Python-2.6.4]$ sudo ln -s /opt/python2.6/bin/python /usr/local/python
[irakli@django Python-2.6.4]$ python -V
Python 2.6.4 

Troubleshooting: if you still see old version of Python, you need to edit /etc/profile (as root), add the following line:

pathmunge /opt/python2.6/bin/
towards the end of the file, before the line that reads something like:
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
and re-login to the system, so that new path location is picked up by the system. Then try running "python -V" again.
[irakli@django \~]\$ sudo yum search php # make sure we did not accidentally mess up "yum", which is the biggest threat when upgrading Python version. If you see no errors, you should be fine

Installing Python Extensions

[irakli@django Python-2.6.4]$ cd ..
[irakli@django src]$ wget http://bit.ly/6E0DNN
[irakli@django src]$ sudo su -
[root@django ~]# cd /home/irakli/src/
[root@django src]# chmod u+x setuptools-0.6c11-py2.6.egg 
[root@django src]# ./setuptools-0.6c11-py2.6.egg --prefix=/opt/python2.6
[root@django src]# exit
logout                                        

# (For some reason installing MySQL-python .egg binary, we downloaded, did not work. Let's show how to install it from source, if you run into a similar problem):

[irakli@django src]$ wget http://bit.ly/6j4uID
[irakli@django src]$ tar xzf MySQL-python-1.2.3c1.tar.gz 
[irakli@django src]$ cd MySQL-python-1.2.3c1
[irakli@django MySQL-python-1.2.3c1]$ python setup.py build
[irakli@django MySQL-python-1.2.3c1]$ sudo python setup.py install
[irakli@django MySQL-python-1.2.3c1]$ cd ..
[irakli@django src]$ python 
Python 2.6.4 (r264:75706, Nov 29 2009, 19:51:34) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
(you should not see any errors, type Ctrl-D to exit)

Install Django

[irakli@django src]$ wget http://www.djangoproject.com/download/1.1.1/tarball/
[irakli@django src]$ tar xzf Django-1.1.1.tar.gz 
[irakli@django src]$ cd Django-1.1.1
[irakli@django Django-1.1.1]$ python setup.py build
[irakli@django Django-1.1.1]$ sudo python setup.py install

[irakli@django Django-1.1.1]$ cd ..
[irakli@django src]$ python
Python 2.6.4 (r264:75706, Nov 29 2009, 19:51:34) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION
(1, 1, 1, 'final', 0)
>>> import MySQLdb

Starting a Django Project

Note: for former PHP developers, it's important to understand that Django project not only does not have to, but also should not be in a web-accessible folder. An installatio that has Django project under a DocumentRoot is inherently insecure.
[irakli@django src]$ sudo mkdir -p /opt/web/django
[irakli@django src]$ sudo chown irakli:webmaster -R /opt/web
[irakli@django src]$ sudo chmod -R 775 /opt/web
[irakli@django web]$ cd /opt/web/django
[irakli@django django]$ /opt/python2.6/bin/django-admin.py startproject iproj
[irakli@django django]$ cd iproj

Configure Apache with mod_wsgi

[irakli@django django]$ cd ~/src
[irakli@django src]$ sudo ln -s /opt/python2.6/lib/python2.6.so /opt/python2.6/lib/python2.6/config/
[irakli@django src]$ wget http://modwsgi.googlecode.com/files/mod_wsgi-2.8.tar.gz
[irakli@django src]$ cd mod_wsgi-2.8
[irakli@django mod_wsgi-2.8]$ ./configure --with-python=/usr/local/bin/python
[irakli@django mod_wsgi-2.8]$ make
[irakli@django mod_wsgi-2.8]$ sudo make install
[irakli@django mod_wsgi-2.8]$ cd ~/src

[irakli@django src]$ vi /opt/web/django/iproj.wsgi

import os
import sys

sys.path.append('/opt/web/django')
os.environ['DJANGO_SETTINGS_MODULE'] = 'iproj.settings'
os.environ['PYTHON_EGG_CACHE'] = '/opt/web/django/iproj/.python-eggs'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()


[irakli@django src]$ mkdir /opt/web/django/iproj/.python-eggs
[irakli@django src]$ sudo chmod -R 777 /opt/web/django/iproj/.python-eggs

[irakli@django src]$ mkdir /opt/web/django/iproj/logs
[irakli@django src]$ sudo chown apache:staff -R /opt/web/django/iproj/logs
[irakli@django src]$ sudo chmod -R 775 /opt/web/django/iproj/logs

[irakli@django src]$ sudo vi /etc/httpd/conf.d/yourdomain.com.conf

<VirtualHost *:80>
  ServerName yourdomain.com

  ErrorLog /opt/web/django/iproj/logs/error_log
  CustomLog /opt/web/django/iproj/logs/access_log combined

  UseCanonicalName Off

  Alias /admin_media /opt/python2.6/lib/python2.6/site-packages/django/contrib/admin/media
  Alias /static /opt/web/django/iproj/static

  WSGIScriptAlias / /opt/web/django/iproj.wsgi
  WSGIDaemonProcess iproj processes=7 threads=1 display-name=%{GROUP}

</VirtualHost>

[irakli@django conf.d]$ sudo /etc/init.d/httpd configtest
Syntax OK

Configure Firewall

  • sudo vi /etc/sysconfig/iptables-config and make sure following variables are set to "yes":\ IPTABLES_SAVE_ON_STOP="yes"\ IPTABLES_SAVE_ON_RESTART="yes"
    Open Web ports:
  • sudo /sbin/iptables -I INPUT -p tcp -m state --state NEW,ESTABLISHED --dport 80 -j ACCEPT
  • sudo /sbin/iptables -I INPUT -p tcp -m state --state NEW,ESTABLISHED --dport 443 -j ACCEPT
  • Restart iptables with: 'sudo /sbin/service iptables stop' and: 'sudo /sbin/service iptables start' and make sure rules are still in. Try restarting server, too, to make sure setting picked up.
[irakli@django conf.d]$ sudo /etc/init.d/httpd restart
Open http://yourdomain.com you should see a Django welcome screen.

Add Startup Scripts

These will ensure, your servers will come back up after a server reboot.
  • sudo /sbin/chkconfig --add httpd
  • sudo /sbin/chkconfig --level 2345 httpd on
  • sudo /sbin/chkconfig --list httpd

  • sudo /sbin/chkconfig --add mysqld
  • sudo /sbin/chkconfig --level 2345 mysqld on
  • sudo /sbin/chkconfig --list mysqld

  • sudo /sbin/chkconfig --add postfix
  • sudo /sbin/chkconfig --level 2345 postfix on
  • sudo /sbin/chkconfig --list postfix
Have fun writing Django programs!

วันอังคารที่ 19 กุมภาพันธ์ พ.ศ. 2556

จัดการ VirtualBox ผ่านเว็บไซต์ด้วย phpvirtualbox


 ก่อนอื่นเราต้องมี VirtualBox ก่อน ต้องใช้รุ่น Oracle เท่านั้น ใช้ Open Source Edition ไม่ได้นะครับ :)
แปลงร่างกันก่อน
sudo -s
จากนั้นใช้คำสั่ง wget เพื่อเอา VirtualBox มาติดตั้ง เลือกรุ่นที่ต้องการให้ดูจากหน้าดาวน์โหลดของ VirtualBox ของผมใช้ Ubuntu Server 12.04 LTS รุ่น Precise Pagolin ครับ
wget http://download.virtualbox.org/virtualbox/4.2.0/virtualbox-4.2_4.2.0-80737~Ubuntu~precise_amd64.deb
จากนั้นสั่งติดตั้งด้วยคำสั่ง
dpkg -i virtualbox-4.2_4.2.0-80737~Ubuntu~precise_amd64.deb
เมื่อติดตั้งได้แล้ว ให้เพิ่มผู้ใช้ vbox และกำหนดให้อยู่ในกลุ่ม vboxusers
useradd -m vbox -G vboxusers
กำหนดรหัสผ่านให้ผู้ใช้ vbox
passwd vbox
สร้างไฟล์ /etc/default/virtualbox เพื่อเก็บ config ของ VirtualBox
vi /etc/default/virtualbox
ใส่ข้อมูลลงไปดังนี้
VBOXWEB_USER=vbox
จากนั้นกำหนดให้ Web Services ของ VirtualBox ทำงานทุกครั้งที่เปิดเครื่อง และสั่ง start service โดยใช้คำสั่ง
update-rc.d vboxweb-service defaults /etc/init.d/vboxweb-service start
ตอนนี้เราก็ได้ VirtualBox ที่เราเรียกกันว่า VirtualBox Headless กันแล้ว ทีนี้มาติดตั้ง phpvirtualbox กันครับ ติดตั้งแพคเกจที่จำเป็นต้องใช้กันก่อน
apt-get install apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common apache2 apache2-doc apache2-suexec libapache2-mod-php5 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libapr1 php5-common php5-mysql php5-suhosin php-pear wget
ดาวน์โหลด phpvirtualbox จากเว็บไซต์โครงการ http://code.google.com/p/phpvirtualbox
wget http://phpvirtualbox.googlecode.com/files/phpvirtualbox-4.1-10.zip
แตกไฟล์ zip แล้วคัดลอกไปยัง /var/www
unzip phpvirtualbox-4.1-10.zip mv phpvirtualbox-4.1-10 phpvirtualbox
แก้ไขค่า config ใน /var/www/phpvirtualbox ดังนี้
cp config.php-example config.php vi config.php
ใส่ข้อมูลในไฟล์ ดังนี้
var $username = 'vbox'; var $password = 'very-secret-password';
เมื่อตั้งค่าเสร็จให้คุณสั่ง start หรือ restart Apache
/etc/init.d/apache restart
แล้วเปิดเว็บ browser ไปยังเซิร์ฟเวอร์ของเราได้เลย ตัวอย่างเช่น http://my-virtualbox-server.com/virtualbox/ จะปรากฎหน้าจอให้เราใส่ username และ password คือ admin ที่เหลือก็เหมือนการทำงานบน GUI ปกติแล้วครับ :)

Epoptes (Master-Client) เสมือน Net support School บน Linux

Installation

Epoptes สามารถติดตั้ง Package ได้เลยใน Linux ตระกูล Debian และ Ubuntu  ส่วนรตระกูล Red Hat ต้องติดต้องส่วนเสริมก่อนดังนี้

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0350B375
series=$(lsb_release -s -c)test "$series" = squeeze && series=lucidtest "$series" = wheezy && series=oneiric
echo "deb http://ppa.launchpad.net/epoptes/ppa/ubuntu $series main" > \
     "/etc/apt/sources.list.d/epoptes-ppa-$series.list"
apt-get update

Server package installation

การติดตั้ง Server Package ต้องเป็น User Root  หรือเที่ยบเท่า Root ( ใช้ sudo บน Ubuntu หรือ su - on Debian):

==> now run the commands from the "Adding the epoptes PPA to your sources" step
sudo apt-get install epoptes

Configuration Server

ทำการแก้ไขไฟล์  /etc/default/epoptes   #( root only)

# Epoptes server will use the following group for the communications socket.
# That means that any user in that group will be able to launch the epoptes UI
# and control the clients.
SOCKET_GROUP=staff           # ยกตัวอย่าง Group ชื่อ staff


หมายเหตุ  SOCKET_GROUP คือ GROUP ที่ระบุให้ User มีสิทธ์ที่จะสามารถใช้งาน Program Epoptes ได้
การสร้าง Group ใน Ubuntu

--> sudo addgroup staff          # add group staff            
--> sudo gpasswd -a testuser staff     # set user "testuser " ในอยู่ในกลุ่มของ staff

Client package installation for standalone clients

==> now run the commands from the "Adding the epoptes PPA to your sources" stepsudo apt-get install epoptes-client

Configuration Client

ทำการแก้ไขไฟล์  /etc/default/epoptes-client         #(root only)
# The server which epoptes-client will be connecting to.
# If unset, thin client user sessions running on the server will try to connect
# to "localhost", while thin client root sessions and fat or standalone clients
# will try to connect to "server".
# LTSP automatically puts "server" in /etc/hosts for thin and fat clients,
# but you'd need to put "server" in DNS manually for standalone clients.
SERVER= 192.168.253.1                           # which is the DNS name or IP address of the server 
    # save and exit
epoptes-client -c             # Fetches the OpenSSL certificate from the server                                                sh -n /etc/default/epoptes

Manually updating the OpenSSL certificate

update the epoptes OpenSSL certificate, but if you need to, here's a command to get you started

openssl req -batch -x509 -nodes -newkey rsa:1024 -days 1826 -keyout /etc/epoptes/server.key -out /etc/epoptes/server.crt

Install Google Chrome with YUM on CentOS 6.2

Enable Google YUM repository

Add following to /etc/yum.repos.d/ file:

# vi etc/yum.repos.d/CentOS-Base.repo

At the last line

(32-bit)
[google-chrome]
name=google-chrome - 32-bit
baseurl=http://dl.google.com/linux/chrome/rpm/stable/i386
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

(64-bit)
 [google-chrome]
name=google-chrome - 64-bit
baseurl=http://dl.google.com/linux/chrome/rpm/stable/x86_64
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

 Note: Both 32-bit and 64-bit repos can be placed in the same file.


Install Google Chrome with YUM (as root user)  

## Install Google Chrome Stable version ##

# yum install google-chrome-stable

wait a min.....
And Done.....


    :P


 



Installing Fabric Control Client

Requirements
  • Python 2.5+ with the development headers
  • python-setuptools and pip (optional, but preferred)
  • gcc

CentOS/RHEL 6.x

# yum install gcc python-devel python-setuptools
# easy_install pip
# pip install fabric

Set Authorized_Keys
(server)

$ ssh-keygen -t rsa

Open file /root/.ssh/id_rsa.pub And copy your public key
        (Example)
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAztitxAcgo8TpH0FgJFYW/sieMTWLqdTczN2E/BrXdbUb/1zS2S23n02Yg8NHuezOrf+STJ/ejQGnIJ5px4TN1FULwSP+mv8CIscdnJfWc9UQYYw5Y55FHTGNyJDOSnda++mgoS0nbjewGcNkzxE4WvAKXlJNVBkJs7d0sb+XjCn0z822tQznum8b27A7p5e0wbhmNcz0R92JEShS9OSle/72mlmueYt5ERRAxgcG2W6Qhb/asd#R$R$FEfaffvfkD1tDyqHm4CdBjUlv55RalncgzmEq33vjJLyDmw+MeGcYE6PWVi5KK+JzegyEOCZiA30iIYTPDVcLNNWvEkJf9dMLPw== root@xxxxxxxxxxxxxx

(All Clients)
  Add a new file  /root/.ssh/authorized_keys. and copy server public key

    (file name authorized_keys)

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAztitxAcgo8TpH0FgJFYW/sieMTWLqdTczN2E/BrXdbUb/1zS2S23n02Yg8NHuezOrf+STJ/ejQGnIJ5px4TN1FULwSP+mv8CIscdnJfWc9UQYYw5Y55FHTGNyJDOSnda++mgoS0nbjewGcNkzxE4WvAKXlJNVBkJs7d0sb+XjCn0z822tQznum8b27A7p5e0wbhmNcz0R92JEShS9OSle/72mlmueYt5ERRAxgcG2W6Qhb/asd#R$R$FEfaffvfkD1tDyqHm4CdBjUlv55RalncgzmEq33vjJLyDmw+MeGcYE6PWVi5KK+JzegyEOCZiA30iIYTPDVcLNNWvEkJf9dMLPw== root@xxxxxxxxxxxxxx
Save And Exit

Creating a fabfile
Create a basic fabfile.py which runs uptime on each of the remote hosts.(Do it on the server.)
#!/usr/bin/env python

from fabric.api import env, run

env.hosts = [ '192.168.1.100', '192.168.1.101', '192.168.1.102' ]

def uptime():
  run('uptime')
env.hosts ,This array is used to store the ip address of the client.

Result :






การติดตั้งและใช้งาน SSL (HTTPS) บน CentOS

HTTPS เป็นการเรียกใช้งาน Web Application แบบโหมด Security โดยใช้ Secure Socket Layer (SSL) encrypt และ decrypt ข้อมูลที่ส่งเมื่อมี Client เรียกใช้งาน (HTTPS ใช้พอร์ต 443 แทนที่ HTTP พอร์ต 80 ซึ่งถ้าเราใช้ port 443 ในการเรียกใช้งานเว็บโปรเจ็คของเรา เราก็จะใช้พอต 80 ทำอย่างอื่นได้ แต่แนะนำให้ทำ Alias บน https ไปด้วยกันดีกว่า)

      โดยปกติการทำ การสร้าง SSL จะต้องลงทะเบียนเสียเงินให้กับพวก CA ต่างๆ แต่อันนี้เป็นการติดตั้งแบบไม่ไม่เสียเงิน คุณภาพอาจอยู่แค่ปานกลาง