วันจันทร์ที่ 30 ธันวาคม พ.ศ. 2556

Crontab FreeBSD


โครงสร้างของ  Crontab  

อ้างถึง
[min] [hour] [day of month] [month] [day of week] [program to be run]

คำอธิบาย:
[min]  คือนาที ค่าที่ใส่ได้ คือ 0-59  และ * ที่หมายถึงทุกๆ นาที
ซึ่งห้ามใส่ * ในช่องนี้เป็นอันขาด ไม่งั้นมันรันทุกๆ นาที (แดร็กระบบ)

[hour]   คือชั่วโมง  ค่าที่ใส่ได้คือ 0-23  และ * ที่หมายถึงทุกๆ ชั่วโมง
---> ทั้งชั่วโมงและนาที แนะนำให้ใส่ 0 ในกรณีไม่อยากใส่อะไร เช่นอยากตั้งเป็นรันทุกๆ วัน
จะได้เป็นการรันตอนเที่ยงคืน (คนน้อย) หรืออาจปรับเป็นตี 1 ตี 2 ตามสมควร

[day of month]  คือวันที่  ค่าที่ใส่ได้คือ 1-31  และ * ที่หมายถึงทุกๆ วันของเดือน (ยังกะประจำเดือน)

[month]  คือเดือน  ค่าที่ใส่ได้คือ 1-12  และ * ที่หมายถึงทุกๆ เดือน

[day of week]  คือวันของสัปดาห์  ค่าที่ใส่ได้คือ 0-6 วันอาทิตย์คือ 0 วันจันทร์คือ 1 ไล่ไปถึงวันเสาร์คือ 6
และ * ที่หมายถึงทุกๆ วันของสัปดาห์

[program to be run]  คือพาทหรือคำสั่งที่เราต้องการรัน


 วิธีการใส่ก็จะมีใส่ตามวิธีเหล่านี้
1. ระบุเวลาที่ต้องการตายตัวเลย
เช่น อยากรันทุกๆ 6:00 ของทุกวัน ก็จะเป็น
0   6   *   *   *   your command

2. ระบุช่วงเวลาที่ต้องการเป็นช่วงๆ
เช่น อยากรันตั้งแต่วันจันทร์ถึงวันพุธ  ก็จะเป็น
0   0   *   *   1-3   your command

3. ระบุช่วงเวลาที่ต้องการเป็นหน่วยย่อยๆ
เช่น อยากรันทุกๆ วันที่ 1  5  7  9  และ 11  ก็จะเป็น
0   0   1,5,7,9,11   *   *   your command

4. ระบุช่วงเวลาเป็น ทุกๆ กี่ x
เช่น อยากรันทุกๆ 4 ชั่วโมง ก็จะเป็น
0   */4   *   *   *   your command
-------------------------------------------------------------------------------------------
ไฟล์  crontab  ของ FreeBSD  อยู่ที่ห้อง  /etc/crontab

การติดตั้ง BIND FreeBSD

การติดตั้ง BIND9
ขั้นตอนที่ 1 ดาวน์โหลด Source Code ของโปรแกรม BIND9 โดยใช้คำสั่งดังต่อไปนี้ หรือแหล่งอื่นๆ
# cd /home/ตำแหน่ง Directory ที่ต้องการ
# fetch 
http://www.freebsd.sru.ac.th/Server/bind-9.6.1-P3.tar.gz
หรือ
# fetch 
http://www.freebsd.sru.ac.th/Server/bind-9.4.1.tar.gz

ขั้นตอนที่ 2 ติดตั้งโปรแกรม BIND
# tar zvfx bind-9.6.1-P3.tar.gz
# cd bind-9.6.1-P3
# ./configure --prefix=/usr/local/bind
# make all install clean

ขั้นตอนที่ 3 ปรับแต่งระบบ
ไฟล์ config ทั้งหมดจะอยู่ใน /etc/namedb จะมีทั้งที่ระบบสร้างมาให้ และที่ต้องสร้างขึ้นเอง โดยมีไฟล์ที่ต้องสร้างขึ้นเอง ดังต่อไปนี้
ส่วนที่ 1 RNDC
ไฟล์ที่เกี่ยวข้องกับ rndc (ความปลอดภัยในระบบ DNS) rndc จะประกอบด้วย rndc.conf และ rndc.key
วิธีสร้างไฟล์ rndc.conf 
# rndc-confgen > /etc/namedb/rndc.conf
วิธีสร้างไฟล์ rndc.key
# rndc-confgen -a
หลังจากนั้นให้ คัดลอก key ใน rndc.key ไปใส่ใน rndc.conf
ตัวอย่างข้อมูล key ในไฟล์ rndc.key
key "rndc-key" {
algorithm hmac-md5;
secret "14VK07fIkp1H20zF9Mn6qw==";
};

ตัวอย่างการนำข้อมูล key ในไฟล์ rndc.key มาใส่ใน rndc.conf สรุปง่ายๆ คือ ทำให้เหมือนกัน..อะน่ะ..อิอิ
key "rndc-key" {
algorithm hmac-md5;
secret "14VK07fIkp1H20zF9Mn6qw==";};


options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};

ส่วนที่ 2 named.conf
ค้นหาบรรทัด listen-on และเพิ่ม IP ของ Server ของเราลงไป
listen-on { 127.0.0.1;203.113.24.199; };
ถ้าระบบ DNS Server ของเรามีระบบ DNS ภายนอกจากผู้บริการอื่นๆ ก็สามารถแทรกเพิ่มได้ (แนะนำว่าควรเพิ่ม เพื่อเป็นแหล่งอ้างอิงภายนอกเมื่อระบบไม่พบข้อมูลใน DNS Cache) แต่อย่างไรก็ตามมันอาจจะก่อให้เกิด Traffic ในระบบ
forwarders {
202.89.18.65;       //เมื่อ IP ดังกล่าวเป็น IP ของ Uninet สามารถเปลี่ยนแปลงได้
};
key "rndc-key" {
algorithm hmac-md5;
secret "14VK07fIkp1H20zF9Mn6qw==";
};
controls{ 
inet 127.0.0.1 port 953
allow{127.0.0.1;}keys{"rndc-key";};
};
zone "freebsd.sig6.mi.th."{
type master;
file "freebsd.sru.ac.th";
};
zone "134.18.172.in-addr.arpa"{ 
type master;
file "172.18.134.55";
};

ขั้นตอนต่อไป สร้างไฟล์ zone ที่ได้เพิ่มใน named.conf
# ee  freebsd.sig6.mi.th
$TTL 3600
@   IN   SOA   ns.freebsd.sig6.mi.th. root.ns.freebsd.sig6.mi.th. (    
2010102401 ; Serial                             
3600 ; Refresh
900 ; Retry
3600000 ; Expire 
3600 ) ; Minimum
IN   NS  ns.freebsd.sig6.mi.th.
@   IN   A   172.18.134.55   
ns  IN   A   172.18.134.55
www IN   A   172.18.134.55

# ee 172.18.134.55 ตามที่กำหนดไว้ใน name.conf
$TTL 3600
@   IN   SOA   ns.freebsd.sig6.mi.th. root.ns.freebsd.sig6.mi.th. (
2010102401 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN   NS   ns.
freebsd.sig6.mi.th.
53  IN   PTR  ns.
freebsd.sig6.mi.th.
56  IN   PTR 
www.freebsd.sig6.mi.th.

สั่ง Start Bind โดยใช้คำสั่ง ต่อไปนี้
/usr/local/bind/sbin/named -c /etc/namedb/named.conf &

Domain Name System (DNS) คืออะไร

Domain Name System (DNS) คือสิ่งที่นำมาอ้างถึงหมายเลขเครื่อง หรือ หมายเลข IP Address เพื่อให้ง่ายต่อการจดจำ DNS จะทำหน้าที่คล้ายกับสมุดโทรศัพท์ คือ เมื่อมีคนต้องการจะโทรศัพท์หาใคร คน ๆ นั้นก็จะต้องเปิดสมุดโทรศัพท์เพื่อค้นหาเบอร์โทรศัพท์ของคนที่ต้องการจะติดต่อคอมพิวเตอร์ก็เช่นกัน เมื่อต้องการจะสื่อสารกับคอมพิวเตอร์เครื่องอื่น เครื่องนั้นก็จะทำการสอบถามหมายเลข IP ของเครื่องที่ต้องการจะสื่อสาร กับ DNS server ซึ่งจะทำการค้นหาหมายเลขดังกล่าว ในฐานข้อมูลแล้วแจ้งให้ Host ดังกล่าวทราบ ระบบ DNS แบ่งออกได้เป็น 3 ส่วน คือ
Name Resolvers โดยเครื่อง Client ที่ต้องการสอบถามหมายเลขไอพีเรียกว่า Resolver ซึ่งซอฟต์แวร์ที่ทำหน้าที่เป็น Resolvers นั้นจะถูกสร้างมากับแอพพลิเคชันหรือเป็น Library ที่มีอยู่ใน Client
Domain Name Space เป็นฐานข้อมูลของ DNS ซึ่งมีโครงสร้างเป็น Tree หรือเป็นลำดับชั้น แต่ละโหนดคือ โดเมนโดยสามารถมีโดเมนย่อย (Sub Domain) ซึ่งจะใช้จุดในการแบ่งแยก
Name Servers เป็นคอมพิวเตอร์ที่รันโปรแกรมจัดการฐานข้อมูลบางส่วนของ DNS โดย Name Server จะตอบการร้องขอทันที โดยการหาข้อมูลตัวเอง หรือส่งต่อการร้องขอไปยัง Name Server อื่น ซึ่งถ้า Name Server มีข้อมูลของส่วนโดเมนแสดงว่า Server นั้นเป็นเจ้าของโดเมนเรียกว่า Authoritative แต่ถ้าไม่มีเรียกว่า Non-Authoritative

MRTG (Multi Router Traffic Grapher)

 ในการบริหารจัดการเครือข่ายคอมพิวเตอร์ภายในองค์กรจำเป็นต้องมีเครื่องมือที่สามารถช่วยวิเคราะห์ มอนิเตอร์ดู Traffic Load บน Network Links ซึ่ง โปรแกรมที่สามารถมอนิเตอร์ระบบเครือข่าย นำข้อมูลมารวบรวมไว้ และนำเสนอเป็นรูปกราฟผ่านเว็บเพจโดยผู้จัดการระบบสามารถมอนิเตอร์ ข้อมูลผ่านโปรแกรมเว็บบราวเซอร์ได้ทันที ซึ่งโปรแกรมที่กล่าวมาคือโปรแกรม MRTG (Multi Router Traffic Grapher) การติดตั้งมีรายละเอียด ดังต่อไปนี้
 
โปรแกรมต่างๆ ที่เกี่ยวข้อง
gd-2.0.33.tar.gz ดาว์นโหลดได้จากเว็บไซต์ http://www.boutell.com 
mrtg-2.16.2.tar.gz ดาว์นโหลดได้จากเว็บไซต์ 
http://oss.oetiker.ch/mrtg/download.en.html
zlib-1.2.3.tar.gz ดาวน์โหลดได้จากเว็บไซต์ http://www.zlib.net/zlib-1.2.3.tar.gz
libpng-1.2.29.tar.gz ดาวน์โหลดได้จากเว็บไซต์ http://www.libpng.org/pub/png/src
หรือใช้คำสั่ง wget ลงในพื้นที่ที่ต้องการ อาทิเช่น cd /usr/local/src แล้วจึงดาวน์โหลด ดังต่อไปนี้
wget 
www.boutell.com/gd/http/gd-2.0.33.tar.gz
wget oss.oetiker.ch/mrtg/pub/mrtg-2.16.2.tar.gz 
wget 
www.zlib.net/zlib-1.2.3.tar.gz
ติดตั้ง zlib
$ tar zxvf zlib-1.2.3.tar.gz
$ rm zlib-1.2.3.tar.gz
$ mv zlib-1.2.3 zlib
$ cd zlib
$ ./configure
$ make
$ cd ..
ติดตั้ง libpng (Library Portable Network Graphics)
$ tar zxvf libpng-1.2.29.tar.gz
$ rm libpng-1.2.29.tar.gz
$ mv libpng-1.2.29 libpng
$ cd libpng
$ make -f scripts/makefile.std CC=gcc ZLIBLIB=../zlib ZLIBINC=../zlib
$ rm *.so.* *.so
$ cd ..
ติดตั้ง gd (GD Graphics Library)
$ tar zxvf gd-2.0.33.tar.gz
$ mv gd-2.0.33 gd
$ cd gd
$ env CPPFLAGS="-I../zlib -I../libpng" LDFLAGS="-L../zlib -L../libpng"
$ ./configure --disable-shared --without-freetype --without-jpeg
$ make
$ cp .libs/* .
$ cd ..  
ติดตั้ง MRTG (Multi Router Traffic Grapher)
$ tar zxvf mrtg-2.16.2.tar.gz
$ mv mrtg-2.16.2 mrtg
$ cd mrtg-2.16.2
$ ./configure --prefix=/usr/local/mrtg \
   --with-gd=/usr/local/src/gd \
   --with-z=/usr/local/src/zlib \
   --with-png=/usr/local/src/libpng
$ make
$ make install

สร้างไดเร็คทอรี่ที่ใช้เก็บ output ของโปรแกรม MRTG ไว้ที่ Document Root ของ Apache
mkdir /var/www/htdocs/mrtg
สร้างไดเร็คทอรี่สำหรับเก็บคอนฟิกของ MRTG ไว้ภายใต้ Home Directory ของ root เอง 
mkdir /root/mrtg
cd /usr/local/mrtg/bin/
ใช้ยูทิลิตี้ cfgmaker ช่วยสร้างไฟล์คอนฟิก มีพารามิเตอร์ดังนี้ หมายเหตุ เบอร์ ip wan ของ router เช่น xxx.xxx.xxx.xxx
$ cd /usr/local/mrtg/bin
$ cfgmaker --global 'WorkDir: /home/httpd/mrtg' \
   --global 'Options[_]: bits,growright' \
   --output /home/mrtg/cfg/mrtg.cfg community@xxx.xxx.xxx.xxx
เมื่อพิมพ์คำสั่งไปแล้วจะมีข้อความเพื่ออ่านค่าพารามิเตอร์ของพอร์ตต่างๆ บน Router ไปเก็บลงไฟล์ mrtg.cfg แต่ถ้ามี error เกิดขึ้น แสดงว่า Router ไม่ได้เปิด service snmp ต้องไป config ที่ router เพื่อเปิด service
สั่งให้ mrtg ทำงาน โดยการรันครั้งแรกนี้จะมีข้อความเกี่ยวกับ log file ฟ้องขึ้นมา ซึ่งไม่ต้องตกใจ เพราะเป็นภาวะปกติสำหรับการรัน mrtg สองครั้งแรก
$ /usr/local/mrtg/bin/mrtg /home/mrtg/cfg/mrtg.cfg
ตั้งให้ mrtg ทำงานทุกๆ 5 นาที
$ ee /home/mrtg/mrtg.cron
เพิ่มบรรทัดข่างล่างลงไป
0-59/5 * * * * /usr/local/mrtg/bin/mrtg /home/mrtg/cfg/mrtg.cfg
สั่งให้ Crontab ทำงาน โดยใช้คำสั่ง ดังต่อไปนี้
$ crontab /home/mrtg/mrtg.cron

วิธีการ config router เพื่อเปิด service snmp ใช้คำสั่ง Remote เข้าไปที่ router
telnet xxx.xxx.xxx.xxx      ; xxx.xxx.xxx.xxx คือหมายลข IP ของ router
User Access Verification
Password:
มันจะถามให้ใส่ Password ให้ใส่ Password ของ router ลงไป
Router>
ให้พิมพ์คำสั่ง ena
Router>ena
Password: 
มันจะถามให้ใส่ Password ให้ใส่ Enable Password ของ router ลงไป
Router#
ให้พิมพ์คำสั่ง conf t
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
ให้พิมพ์คำสั่ง snmp-server community public ro
Router(config)#snmp-server community public ro
Router(config)#exit
Router#wr mem
Router#exit
 
ทดสอบดูข้อมูล Traffic บนผ่านโปรแกรมเว็บบราวเซอร์ได้ ที่ http://xxx.xxxx.xxx/mrtg หรือตำแหน่งของเว็บเพจที่เรากำหนดในเว็บเซิร์ฟเวอร์

การติดตั้ง Web Server

เว็บเซิร์ฟเวอร์ หมายถึง Application ที่ทำหน้าที่รับและประมวลผลเอกสารที่ถูกร้องขอจากผู้ใช้บริการทางอินเทอร์เน็ต ซึ่งเว็บเซิร์ฟเวอร์จะส่งเอกสารกลับไปแสดงผลให้ผู้ใช้บริการผ่านบราวเซอร์นอกจากเว็บเซิร์ฟเวอร์ จะถูกนำมาให้บริการในอินเทอร์เน็ตแล้วแต่อาจมีการประยุกต์ให้นำมาใช้กับเครือข่ายภายในองค์กรหรืออินเทอร์เน็ตได้เช่นกัน
โปรแกรมที่สามารถทำหน้าที่หรือให้บริการเว็บเซิร์ฟเวอร์บนระบบ FreeBSD มีหลายโปรแกรม ในบทความนี้ผมเลือกใช้ Apache เวอร์ชั่น 2.2.8 โดยมีการใช้งานร่วมกับ PHP เวอร์ชั่น 5.2.5 และ MySQL เวอร์ชั่น 5 ในส่วนของ Apache สามารถดาวน์โหลด Source Code ได้ที่ http://www.apache.org/ ขั้นตอนการติดตั้งมีรายละเอียด ดังต่อไปนี้
ขั้นตอนที่ 1 ติดตั้ง Apache
เข้าไปในตำแหน่งที่เราดาวน์โหลดโปรแกรม และทำการแตกไฟล์เพื่อติดตั้ง
# tar zvfx httpd-2.2.8.tar.gz
# cd httpd-2.2.8
# ./configure --prefix=/usr/local/apache --enable-so
# make all install clean
ขั้นตอนที่ 2 ติดตั้งภาษา Perl
ภาษา Perl เป็นภาษาที่สำคัญยิ่งต่อการติดตั้ง PHP หากไม่มีภาษา Perl จะไม่สามารถติดตั้ง PHP ได้ ขั้นตอนการติดตั้งภาษา Perl มีเทคนิคง่ายๆ ดังต่อไปนี้
# pkg_add -v -r perl
ขั้นตอนที่ 3 ติดตั้ง Ports Collection
# sysinstall

เลือกรายการ Distributions แล้วกด Enter

เลือก ports โดยการเลื่อนแถบแสงไปยังรายการดังภาพ แล้วกด Spacebar



ขั้นตอนที่ 4 ติดตั้ง PHP

เนื่องจาก PHP มีฟังก์ชัน รองรับการทำงานร่วมกับ XML ด้วย เราจึงต้องลง libxml2 สามารถติดตั้งทาง ports มีขั้นตอน ดังต่อไปนี้
# cd /usr/ports/textproc/libxml2 
# make all install clean
หากในระบบของเราต้องการใช้งานร่วมกับฟังก์ชันกราฟิก GD เราก็จะต้องติดตั้งด้วย เช่นเดียวกันหากมีฟังก์ชันหรือโมดูลอื่นๆ ที่เราต้องการใช้งานเราก็สามารถติดตั้งได้ตามต้องการ ติดตั้งทาง ports มีขั้นตอน ดังต่อไปนี้
# cd /usr/ports/graphics/gd
# make all install clean
เข้าไปในตำแหน่งที่เราดาวน์โหลดโปรแกรม (สามารถดาวน์โหลดได้ที่ http://www.php.net/downloads.php) และทำการแตกไฟล์เพื่อติดตั้ง
# tar zvfx php-5.3.8.tar.gz
# cd php-5.3.8
# ./configure --prefix=/usr/local/apache/php --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql --with-zlib --with-gettext --with-gd --enable-mbstring --enable-sockets --enable-soap --disable-cgi
# make all install clean
หมายเหตุ --enable-mbstring มีการใช้งานใน PostfixAdmin จำเป็นต้อง enable ครับ ถ้าไม่ได้ใช้ก็ไม่ต้องใส่
หลังจากนั้นให้เพิ่ม AddType application/x-httpd-php .php ใน configuration ของ Apache ในไฟล์ httpd.conf อยู่ใน /usr/local/apache/conf/ เพื่อให้สามารถทำงานร่วมกับภาษา PHP ได้


ขั้นตอนที่ 5 ทดสอบการทำงานของเว็บเซิร์ฟเวอร์และปรับแต่งระบบ
# /usr/local/apache/bin/apachectl start  <-- สั่งให้ Apache ทำงาน
ถ้าแสดงข้อความ Error ประมาณนี้ No such file or directory: Failed to enable the 'httpready' Accept Filter ให้ใช้คำสั่งนี้
# kldload accf_http
# ee /boot/loader.conf   แล้วพิมพ์คำสั่ง   accf_http_load="YES"
หลังจากใช้คำสั่งนี้แล้ว ทดสอบโดยการเปิดหน้าเว็บบราวเซอร์ และพิมพ์ IP Address หรือ Domain ของเครื่องหากขึ้นข้อความ It works! แสดงว่าสามารถทำงานได้แล้ว
ถ้าเราต้องการกำหนดเอกสารหน้าแรก (Home page) ให้ทำงานด้วย index.php หรืออื่นๆ ตามที่เราต้องการสามารถปรับแก้ไขไฟล์ httpd.conf ซึ่งอยู่ใน /usr/local/apache/conf และค้นหาบรรทัดประมาณด้านล่างนี้ แล้วเพิ่ม index.php หรืออื่นๆ ตามต้องการ โดยจะต้องให้แต่ละชนิดคั่นด้วยเว้นวรรค
DirectoryIndex index.php index.html index.htm

ถ้าในกรณีที่เราต้องการใช้ภาษา PHP ด้านในของไฟล์ .html จะต้องเพิ่มคำสั่ง ดังต่อไปนี้
AddType application/x-httpd-php .php .htm .html
เมื่อแก้ไขไฟล์ Configuration เสร็จเรียบร้อยแล้ว ออกจาก Editor หากใช้ ee ให้ออกโดยกด Ctrl+C แล้วพิมพ์ exit

ทุกครั้งหลังจากที่เรามีการปรับแต่งระบบ เราจะต้องสั่งให้ Apache อ่านค่า Configuration ใหม่ โดยใช้คำสั่ง ดังต่อไปนี้
# /usr/local/apache/bin/apachectl restart  <-- สั่งให้ Apache อ่านค่า Configuration ใหม่ และทำงาน
หากต้องการให้ Apache หยุดทำงาน ใช้คำสั่ง
# /usr/local/apache/bin/apachectl stop


ขั้นตอนต่อไป เพิ่มคำสั่ง ดังต่อไปนี้ (สามารถพิมพ์ต่อจากคำสั่งด้านบนได้) โดยมีรายละเอียด ดังต่อไปนี้
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

วันอาทิตย์ที่ 29 ธันวาคม พ.ศ. 2556

FreeBSD คืออะไร



       FreeBSD เป็นระบบปฏิบัติการ (OS: Operating System) ที่มีความสามารถสูง สามารถติดตั้ง และสนับสนุนการทำงานในหลาย Platform อาทิเช่น ระบบ x86 (Pentium และ Athlon), AMD-64 (Opteron, Athlon64 และ EM64T), Alpha/AXP, IA-64, PC-98 และ UltraSPARC
     FreeBSD พัฒนามาจาก BSD เป็นเวอร์ชั่นของ UNIX® พัฒนาโดย University of California, Berkeley ปัจจุบันมีผู้สนใจและหันมาใช้ระบบปฏิบัติการ FreeBSD กันอย่างแพร่หลาย สามารถประยุกต์ใช้ทำเครื่องแม่ข่าย (Server) สำหรับให้บริการต่าง ๆ บนระบบเครือข่ายคอมพิวเตอร์และอินเทอร์เน็ต และมหาวิทยาลัยราชภัฏสุราษฎร์ธานี ก็ใช้ระบบปฏิบัติ FreeBSD ด้วยเช่นกัน เพราะระบบปฏิบัติการดังกล่าวมีประสิทธิภาพสูง ทำงานได้รวดเร็ว ติดตั้งง่าย ระบบความปลอดภัยสูง เพื่อนๆ ลองดูซิครับแล้วจะติดใจ
ที่มา :: www.freebsd.org
ความเป็นมาของ ฟรีบีเอสดี (History of FreeBSD)
         Jordan Hubbard ได้เขียนถึงความเป็นมาของ FreeBSD เอาไว้ที่หน้าเว็บไซต์http://www.freebsd.org/doc/en_US.ISO8859-1/books /handbook/history.html เอาไว้ว่า
         โครงการ FreeBSD เกิดขึ้นประมาณต้นปี 1993 ส่วนหนึ่งสืบเนื่องมาจากพัฒนาการของ "Unofficial 386BSD Patchkit'' จากผู้ร่วมงาน 3 คน คือ Nate Williams, Rod Grimes และ Jordan Hubbard

         เป้าหมายเดิมของ ของการสร้างโปรแกรม 386BSD เพื่อแก้ปัญหามากมาย ที่ patchkit แก้ไม่ได้ ชื่อโครงการนี้แต่เดิมคือ "386BSD 0.5" หรือ "386BSD Interim'' นั่นเอง
         386BSD เดิมเป็นระบบปฎิบัติการของ Bill Jolitz's แต่โปรแกรมนี้มีจุดอ่อนหลายอย่างและไม่ได้พัฒนาต่อเนื่อง กล่าวคือ patchkit มีขนาดใหญ่มากขึ้นทุกวัน และทำงานได้ช้า (patchkit swell) พวกเขาจึงช่วยแก้กันปัญหา 386BSD แต่แผนปฏิบัติการครั้งนี้ต้องหยุดชะงักเพราะ Bill Jolitz เขาตัดสินใจถอนตัวไม่สนับสนุนดำเนินการแก้ปัญหาในเรื่องนี้ โดยผู้ร่วมงานทั้ง 3 คนก็ยังไม่ทราบเหตุผลการตัดสินใจของ Bill Jolitz จนถึงบัดนี้
         ในส่วนของผู้ร่วมงานเห็นว่าถ้าดำเนินการแก้ปัญหาสำเร็จจะมีประโยชน์มากแม้ว่า Bill จะไม่สนับสนุนพวกเขาก็ตามเลยดำเนินการต่อไป และเปลี่ยนชื่อโครงการว่า "FreeBSD'' โดยความร่วมมือของ David Greenman การดำเนินการเบื้องต้นโดยการกำหนดเป้าชัดเจน หลังจากนั้นโครงการจึงเป็นรูปร่างเป็นจริงขึ้นมา Jordan Hubbard กล่าวว่าเขาติดต่อกับ Walnut Creek CDROM เพื่อมุ่งหวังปรับปรุงการปฏิบัติงานของ FreeBSD แก้ข้อบกพร่องในการใช้ร่วมกับอินเตอร์เน็ต Walnut Creek CDROM ไม่เพียงแต่สนับสนุนความคิด FreeBSD บน CD เท่านั้น แต่ดำเนินการสนับสนุนโครงการด้วยการให้สามารถใช้งานกับอินเตอร์เน็ตได้เร็วมากขึ้น ถ้าหากว่าไม่มี Walnut Creek CDROM's มาช่วย FreeBSD จะถูกลืมไป ชื่อเสียงการยอมรับน่าจะไม่มีจนถึงทุกวันนี้
         การจัดจำหน่าย CDROM (and general net-wide) ครั้งแรกคือ FreeBSD 1.0 ตั้งแต่ธันวาคม 1993 ชุด CDROM นี้พัฒนามาจาก 4.3BSD-Lite ("Net/2'') ซึ่งเป็นที่ชื่อที่มาจาก U.C. Berkeley มีส่วนประกอบได้มาจาก 386BSD Free Software Foundation จัดได้ว่าค่อนข้างประสบความสำเร็จทีเดียว
ต่อมาอีกชุดหนึ่งคือ FreeBSD 1.1 ออกมาในเดือนพฤษภาคม 1994.
         ในช่วงเวลาเดียวกันเริ่มเกิดปัญหาขึ้นเมื่อ Novell and U.C. Berkeley มีการดำเนินการฟ้องร้องเรื่องสถานภาพตามกฎหมาย Berkeley Net/2 tape เงื่อนงำโดยสถานภาพในแง่กฎหมายตาม U.C. Berkeley's ซึ่งได้รับสัมปทานส่วนใหญ่ Net/2 และเป็นทรัพย์สินของ Novell ซึ่งได้รับสิทธิบัตรมาจาก AT&T สิ่งที่ Berkeley ได้รับมาเป็นการตอบแทนก็คือ Novell's ซึ่ง 4.4BSD-Lite ปล่อยออกจำหน่าย เมื่อมีการจำหน่ายออกจริง จึงได้มีการประกาศว่า ลักษณะที่ไม่สะดวกใช้ มีการแนะนำให้ใช้ Net/2 แทนได้ รวมทั้ง FreeBSD งานทั้งโครงการดำเนินมาถึงปลายเดือนกรกฎาคม 1994 จึงมีการหยุดจำหน่ายผลิตภัณฑ์ที่พัฒนามาจาก Net/2 ภายใต้เงื่อนไขนั้น มีข้อตกลงให้จำหน่ายเป็นครั้งสุดท้ายก่อนสิ้นสุดการจำหน่ายตามสัญญา, ตัวที่ออกมาจำหน่ายหลังสุดคือ FreeBSD 1.1.5.1. ก่อนที่จะไม่ให้จำหน่ายต่อไปอีก
         FreeBSD ได้ดำเนินการพัฒนาใหม่จากเดิมที่ใหม่สุดแต่ยังไม่ สมบูรณ์ซึ่งเรียกกว่า 4.4BSD-Lite bits. มันปราดเปรียวขึ้นเพราะ Berkeley's CSRG ตัดส่วนที่เทอะทะออกไปเพราะสะดวกในการปฏิบัติงานได้สะดวกขึ้น (due to various legal requirements) และโดยข้อเท็จจริงที่ว่า Intel port of 4.4 ไม่สมบูรณ์แบบเอาเลย โครงการนี้ต้องใช้เวลาจนถึงพฤศจิกายน 1994 ส่วนที่ไม่สมบูรณ์นี้ ต่อจากนั้นจึงส่งตัวนี้ส่ง FreeBSD 2.0 ทางอินเตอร์เน็ตและ CDROM (ในปลายเดือนธันวาคม) แม้ว่าจะมีข้อบกพร่องอยู่บ้าง (FreeBSD 2.0.5) ในการ release ครั้งนี้นับว่าประสบความสำเร็จ ตามมาด้วยการ release ต่ออีกครั้งหนึ่ง (FreeBSD 2.0.5) ในเดือนมิถุนายน 1995
         FreeBSD 2.1.5 เปิดตัวในเดือน สิงหาคม 1996 และเป็นที่นิยมพอสมควรในบรรดา ISP และ แวดวงการค้า เป็นผลให้มีการออกชุดใหม่ FreeBSD 2.1.7.1 ออกในเดือน กุมภาพันธ์ 1997 และ ก่อให้เกิดการพัฒนา 2.1-STABLE ขึ้น ซึ่งเป็นในช่วงการดูแลให้โปรแกรมสามารถใช้การได้ดี เน้นแก้ไขในด้านการรักษาระบบความปลอดภัยและการแก้ปัญหาข้อผิดพลาดของโปรแกรม (RELENG_2_1_0).

         FreeBSD 2.2 แยกย่อยมาจากการพัฒนา mainline ("-CURRENT'') ในเดือนพฤศจิกายน 1996 ให้เป็น RELENG_2_2 branch, และมีการออกชุดที่สมบูรณ์ (2.2.1) ในเดือนเมษายน 1997 ที่มีการ releases ต่อมาร่วมกับ 2.2 branch มีในช่วง the summer และ fall of '97 อันสุดท้าย (2.2.8 ) ในเดือน พฤศจิกายน 1998 การเปิดตัวออกมาเป็นทางการของ FreeBSD 3.0 ในเดือนตุลาคม 1998 และถือเป็นการสิ้นสุดการการพัฒนาในรุ่น 2.2 branch.

         โครงการใหญ่มีการเริ่มต้นอีกครั้งหนึ่งในวันที่ 20 เดือนมกราคม 1999 นำไปสู่โครงการย่อย คือ 4.0-CURRENT และ 3.X-STABLE branches จาก 3.X-STABLEคือ 3.1 เปิดตัวเมื่อวันที่ 15 กุมภาพันธ์ 1999, 3.2 เมื่อ 15 พฤษภาคม 1999, 3.3 เมื่อ 16 กันยายน 1999, 3.4 เมื่อ 20 พฤษจิกายน 1999, และ 3.5 เมื่อ 24 มิถุนายน 2000, หลังจากนั้นไม่กี่วันมีการแก้ไขจาก 3.X-STABLE 3.5.1 เพื่อทำงานรักษาความปลอดภัยร่วมกับ Kerberos. และนี่ถือว่าเป็นการจัดเป็นการเปิดตัวครั้งสุดท้ายของ 3.X-STABLE 3.X branch
         มีการออกโครงการใหม่อีกโครงการหนึ่งเมื่อ 13 มีนาคม 2000 ก่อให้เกิด 4.X-STABLE branch มีการ releases 4.X-STABLE branch ออกมาหลายชุด เริ่มจากเดือนมีนาคม 2000 และออกชุดสุดท้ายคือ 4.11-RELEASE เมื่อเดือนมกราคม 2005.
         ชุดที่รอคอยกันมาคือ 5.0-RELEASE ออกมาเมื่อวันที่ 19 เดือนมกราคม 2003 เป็นงานที่พัฒนาต่อเนื่องกันมาเกือบ 3 ปี การเปิดตัวครั้งนี้จัดว่าเป็นการเริ่ม FreeBSD ยุคใหม่ที่การออกแบบมาเพื่อใช้กับf advanced multiprocessor และ สนับสนุน UltraSPARCและ ia64 platforms ตามมาด้วยการออกรุ่น5.1 ในเดือนมิถุนายน 2003 ตามมาด้วย 5.2.1-RELEASE ซึ่งออกมาเมื่อเดือนกุมภาพันธ์ 2004
         ในเดือนสิงหาคม 2004 5.3-RELEASE และกำลังตามมาด้วย 5.4 ซึ่งเป็นการเริ่มต้น releases ชุด 5-STABLE branch จนถึงปัจจุบันโครงการที่พัฒนาต่อเนื่องยาวนานกันมาใน 6.X-CURRENT (trunk) branch, ซึ่งเป็นโครงการใหญ่ และ SNAPshot releases เป็น 6.X ในแบบ CDROM และทางอินเทอร์เน็ต ซึ่งติดตามได้จาก snapshot server