# perl -i.bak -npe 's/\r\n/\n/g' file ...
2. Atau bisa kita pake:
# tr -d '\r' < dos-text-file > unix-file
3. Atau bisa juga:
# col -b < dos-text-file > unix-text-file
Cuma ikut-ikutan ngeblog, biar gak kayak orang goblog!
# perl -i.bak -npe 's/\r\n/\n/g' file ...
2. Atau bisa kita pake:
# tr -d '\r' < dos-text-file > unix-file
3. Atau bisa juga:
# col -b < dos-text-file > unix-text-file
# cd /usr/ports/misc/gnuls/
# make ; make install
2. Bikin alias di ~/
, kalo root pake .bashrc
, sedangkan user pake .bash_profile
.
# cat .bashrc
alias ls='gnuls --color=auto -a'
$ cat .bash_profile
alias ls='gnuls --color=auto -a'
Error code 00000027, parameter1 baad00a3, parameter2 a7a6b3b8, parameter3 a7a6b0b4, parameter4 00040001.
Saya mulai mencari informasi dari Google, dan ada beberapa solusi yang bisa ditawarkan:tar
, untuk aplikasi kompresi menggunakan gzip/gunzip
. $ tar cvf file.tar .
c=[c]reate, v=[v]erbose, f=[f]ile, titik[.]
menunjukan
current directory atau direktori aktif sekarang. Jadi jika anda
pengen bikin archive dng nama direktori "coba", anda bikin dulu
direktori "coba" setelah itu anda masukan file2 yg hendak anda
archiving ke direktori itu (coba), selanjutnya anda masuk ke
direktori "coba" lalu lakukan perintah diatas. karena defaultnya
tar ngebackup (melihat) device (tape) /dev/sa0
, padahal kita
sebenernya ingin bikin archive di darektori aktif sehingga otomatis
proses kita akan gagal dengan itu maka kita perlu pake option
[f]ile
untuk mengarahkan archive kita. output errornya:
tar: can't open /dev/sa0 : Device not configured
$ tar tf file.tar atau $tar tf file.tar | more
Note: Untuk option [f]ile
sama halnya dng kejadian diatas, kalo nggak maka akan nampilin error yg sama persis. $ gzip -c9v file.tar > file.tar.gz
4. Sebetulnya tar juga sudah membawa untuk "filtering" direct ke bentuk file compression cuma untuk customize kompresi tidak selengkap jika kita pisah dng 2 proses (proses tar
dan proses gzip
). Misalnya untuk proses tar
langsung difilter thd kompresi:
$ tar zcvf foo.tgz * atau
$ tar zcvf foo.tar.gz *
Secara otomatis foo.tgz
dan foo.tar.gz
akan terbentuk, jangan lupa untuk mengecheck kalo2 archivenya rusak. dengan cara mirip dengan langkah diatas:
$ tar ztvf foo.tgz atau
$ tar ztvf foo.tar.gz
5. Untuk mengecheck apakah proses yg kita lakukan benar, kita check dng cara:
$ tar tfzv file.tar.gz atau $tar tfzv file.tar.gz | more
Note: Kita lakukan kompresi dng menggunakan gzip/gunzip
. untuk options c=[c]reate
, 9
=kompresi paling baik, v
=[v]erbose, z
=untuk nampilin kompresi, untuk f
sama keterangannya ama yg diatas.*.zip
, maka di UNIX telah disediakan toolnya yaitu zip
dan unzip
untuk sebaliknya. Misalnya kita akan create test.zip
di direktori /etc
maka:
$ cd /etc
$ zip -r -v -9 test.zip *
Jika anda ingin menencrypt isi arsip bisa gunakan -e [encrypt]
$ zip -r -v -e -9 test.zip *
Note: Opsi -r[ecrusive]
, -v[erbose]
, -9 [Best Compression]
, dan untuk Asterik (*)
menunjukan "current directory". Untuk membuka anda bisa gunakan "unzip
" misalanya:
$ cd /tmp
$ unzip test.zip
Jika anda ingin membuat archive "hanya untuk file tertentu", anda bisa gunakan beberapa options, sebagai contoh:
$ zip -c -v -9 /hasil/file/foo.zip -j /target/config/source.conf
Dengan perintah diatas maka kita akan meletakan foo.zip
di dalam direktori /hasil/file/
dengan mengambil source.conf
(file yang mau dizip) di direktori /target/config/
, dengan option -j
maka "full path dari source.conf
direktori tidak akan di zip
".bzip/bzip2
, Anda bisa menggunakan ekstensi *.tar.bz
, *.tar.bz2
, *.tbz
sebagai contoh.
$ tar -cvf backup.tar *
$ bzip -cvf backup.tar > backup.tar.bz atau
$ bzip2 -cvf backup.tar > backup.tar.bz2
Untuk bzip
hasil akhir berekstensi *.bz
, sedangkan untuk bzip2
hasil akhir berekstensi *.bz2
, nah selain itu ada beberapa contoh dengan fasilitas "filtering" via kompresi misalnya:
$ tar -ycvf backup.tbz * atau
$ tar -ycvf backup.tar.bz *
Dan untuk bzip2
:
$ tar -ycvf backup.tar.bz2 *
Untuk pengechekan kita bisa gunakan perintah spt:
$ tar ytvf backup.tbz
$ tar ytvf backup.tar.bz
$ tar ytvf backup.tar.bz2
Untuk pengekstrakan *.tbz, *.bz, *.bz2
lakukan spt:
$ tar yxvf backup.tbz
$ tar yxvf backup.tar.bz
$ tar yxvf backup.tar.bz2
PS: Untuk options dan keterangan lebih lanjut anda bisa baca manual gzip/gunzip
, bzip/bzip2
, zip
, unzip
dan tar
.
block in all....(1)
pass in all.....(2)
Pertama akan dijalankan rule (1), setelah itu rule (2). Jadi otomatis hasilnya rule (2) alias paket boleh masuk. Rule2 yg bertumpuk seperti. Misalnya:
block in all....(1)
block in all....(2)
block in all....(3)
block in all....(4)
block in all....(5)
pass in all.....(6)
Rule (1) s/d (4) tidak ada faedahnya. Dengan quick
kita dapat meyederhanakan rule2 kita. Misalnya:
block in quick all...(1)
pass in all..........(2)
Bisa kita artikan rule (1) akan dilihat pertama, selanjutnya ipf melaksanakan ketentuan semua rule tsb sampe selesai baru rule (2). Penulisan subnet IP yg diperbolehkan adalah 255.255.0.0
atau /16
. Misalnya:
block in quick from 192.168.0.0/16 to any
atau
block in quick from 192.168.0.0/255.255.0.0 to any
Kita dapat mengunakan keyword on
untuk menspesifikan interface yg kita pake. Misalnya:
block in quick on xl0 all
atau
block in quick on xl0 from 192.168.0.0/16 to any
Kita dapat menentukan juga outgoing paket dng nama keyword out
. Misalnya:
pass out quick on xl0 from 192.168.0.0/16 to any
Jika kita ingin melogkan apa yg terjadi, maka ada baiknya kita gunakan keyword log
. Misalnya:
block in log quick on xl0 from 192.168.0.0/24 to any
Keyword proto
dapat kita gunakan untuk menspesifikan protocol yg kita pake berikut dengan tipe protocolnya. Backslash (\
) dapat kita pake untuk menyambung perintah pada line berikutnya. Misalnya:
block in log quick on xl0 proto icmp from any to any
atau
pass in quick on xl0 proto icmp from any to 192.168.0.0/24 \
icmp-type 0
Pengunaan keyword port
lebih menitik beratkan kepada port yg dilalui. Misalnya:
block in log quick on tun0 proto tcp from any to \
192.168.0.0/24 port = 22
Untuk membangun rule2 yg sangat kuat ada baiknya kita kompile kernel dengan default deny all
, shg kita list rule yg kita perlu (This my fav). Kita mulai dengan rule deny
kayak gini. Misalnya:
block in all
block out all
Nah baru kita listing rule2 yg diperbolehkan. Misalnya:
pass in quick on xl0 proto tcp from any to 192.168.0.1/24 \
port = 80
192.168.0.1/24
lewat port 80 (www)
. Jika ada respon dari 192.168.0.1/24
akan tetep ditolak juga, maka agar terjadi komunikasi (tidak pincang) maka kita listing juga rule sebaliknya. Misalnya:
pass out quick on tun0 proto tcp from 20.20.20.1/32 \
port = 80 to any
keep-state
, jika rule kita dibubuhi keep-state
ini berati rule tersebut dah masuk ke state table ipf
, sehingga ipf
tidak perlu lagi mengecek ulang validasi rule tersebut alias jika terjadi handshake
di kemudian hari ipf
akan langsung mengijinkan masuk. Misalnya:
pass out quick on xl0 proto tcp from 192.168.0.1/24 to any \
keep state
xl0
dengan protocol tcp
dari 192.168.0.1/24
ke mana saja, dengan keep-state
ini rule yg bersangkutan langsung di apply ke state table dan ipf
tidak akan ikut campur nggak akan ngecheck ulang lagi validasi. ini terjadi pas pertama kali SYN
paket menyentuh hand shake
server kita.
Sangat delematis kita menggunakan keep-state
, coba kita pikirkan baik2 akan muncul pertanyaan dibenak kita "Oh..kalo gitu ipf hanya mengenal SYN
yg dulu dung, dengan kata lain SYN
pas entry ke state table pertama kali..?", yups memang benar meski ipf
akan close
(idle
)selama 60 detik (1 menit) tapi bukan refresh
. dengan kata lain paket SYN
-nya basi. ini pun berlaku untuk koneksi TCP
selanjutnya misalnya yg lainya (FIN
, XMAS
etc) setelah handshake terjadi.
Untuk masalah diatas tentunya ada solusi tersendiri. dengan penambahan keyword flags
alias menspesifikan flags untuk TCP
. Misalnya:
pass in quick on tun0 proto tcp from any to 192.168.0.1/24 \
port = 23 flags S keep state
Artinya rule diatas akan hanya melihat flags TCP
SYN
saja untuk flags
lainya (FIN
, XMAS
etc) tentunya akan keblock.
Berikut 6 flags TCP:
+----------------------------------+--------------+
|Singkatan dari koneksi TCP/IP | Flags |
+----------------------------------+--------------+
| SYN | S |
| URG | U |
| PUSH | P |
| FIN | F |
| RST | R |
| ACK | A |
+----------------------------------+--------------+
Jika kita menulis flags S
bisa kita tulis S/SUPFRA
. dengan kata lain paket hanya cocok flags
S
. Misalnya:
Jika kita tulis flags S/SA
artinya match dengan S
dan
flags "UPFR"...(1)
Jika kita tulis flags S/SAUP
artinya match dengan S
dan
flags "FR".....(2)
Dalam perjalan paket tersebut tidak jarang terpecah-pecah (fragmention) Untuk mengatisipasi tentunya ipf
telah menyediakan, yaitu dengan keyword keep frags
(tanpa tanda '-'). Misalnya:
pass in quick on xl0 proto tcp from any to 192.168.0.1/32 \
port = 23 flags S keep state keep frags
Keyword return-rst
berguna untuk merespon jika service tidak tersedia. return-rst
hanya berlaku untuk jenis protocol TCP
. Misalnya:
block return-rst in log proto tcp from any to 192.168.0.0/24 \
port = 23
Hasilnya untuk rule diatas adalah connection refused
. Ada keyword return-icmp(jenis_error)
. Misalnya:
block return-icmp(port-unr) in log quick on tun0 proto udp \
from any to 192.168.0.0/24 port = 111
Untuk jenis_error kita pake port-unr
(port unreachable).
Selain respone block
paket spt diatas ipf
menyediakan keyword return-icmp-as-desta
. Misalnya:
block return-icmp-as-dest(port-unr) in log on tun0 proto udp \
from any to 192.168.0.1/24 port = 111
Jika anda ingin mengatur log
, kita bisa gabungkan dengan Syslog
. ada keyword log level
. Misalnya:
block in log level auth.info quick on xl0 from 192.168.0.1/24 to
any port = 22
Jika anda mau mendapatkan informasi log
header gunakan keyword log body
pada proses ini ipf
akan memberikan 128 bytes
pertama dari paket. Untuk mempersingkat/efesiensi rule, kita bisa bikin kelas2 nah dengan mengunakan pasangan keyword head
dan group
. Misalnya:
block out quick on xl0 all head 10 ...(1)
pass out quick proto tcp from any to 192.168.0.1/24 port = \
80 flags S keep state group 10 .......(2)
Jika paket bukan untuk xl0
, make nggak akan match
dengan rule (1) dan rule (2) dan sebaliknya jika match
maka akan dieksekusi rule (2) dan rule2 lainya yg mempunyai keyword group 10
. artinya jika kita mempunyai network yg cukup besar dengan macam2 rule tentunya kita sedikit kewalahan dengan head dan group kita bisa membagi rule tersebut menjadi tree style
. Misalnya:
block out quick on xl0 all head 1 ...(1a)
pass out quick proto tcp from any to 192.168.0.1/24 port = \
80 flags S keep state group 1 .......(2a)
block out quick on xl1 all head 2 ...(1b)
pass out quick proto tcp from any to 192.168.0.2/24 port = \
80 flags S keep state group 2 .......(2b)
Jika ada paket dengan cocok dengan rule (xa) make untuk kelompok rule (xb) akan diabaikan, dan sebaliknya tentunya ini akan menambah efesiensi kerja ipf
kita. Jika kita lakukan traceroute
dari mesin luar ke mesin kita secara default kita mendapatkan hop2 routing tersebut, ada yg menarik dari
ipf
ini salah satunya keyword fastroute
, dengan keyword ini kita bisa menyembunyikan informasi2 hop tersebut. Misalnya:
block in quick on xl0 fastroute proto udp from any to any \
port 33434 >< 33465
Hal ini terjadi karena ada proses penurunan Time To Live (TTL)
dari paket Acknowledging (ACK)
. Catatan:
< : Lebih kecil
> : Lebih besar
= : Sama dengan
<= : Lebih kecil sama dengan
>= : Lebih besar sama dengan
!= : Tidak sama dengan
<> : Kurang dari X, lebih dari X
>< : Lebih besar dari X, kurang dari X
@DiahEstiani
yg meminta via/from custom dari apps twitter
, maka yang terpikir oleh saya adalah bagaimana menyajikan bentuk webbase
yang kompatibel dan mudah digunakan. Sebelomnya saya sudah membikinnya tapi hanya posting saja tentunya ini bikin ribet dan sulit untuk pemakai.webbase
untuk client webbase dan tentunya bertajuk Open Source
, setelah berhari-hari saya mendapatkan Dabr
, untuknya bukan cuma webbase untuk digunakan di Desktop
saja, featurenya bisa untuk mobile
juga. Setup Dabr
ini tidaklah terlalu sulit, hanya 3 langkah saja (Register Apps di dev.twitter.com
, setup webserver
di hostingan, dan Dabr
itu sendiri).API Twitter
:twitter
)Website
: (Jika diklik di apps via/from akan dilinkan kemana)Application type: Read, Write and Access direct messages
Consumer key:
Consumer secret:
Dabr
tidak menyimpan Username/Password
, melainkan langsung diproses oleh Oauth twitter
. System yang dibikin oleh dev Twitter
untuk keamanan dan menghindari pihak ke 3 untuk mencuri data-data yang bersifat privasi. Beberapa persyaratan yg harus dipenuhi untuk ngehosting Dabr
adalah:Webserver
(Apache
, Lighttpd
, Nginx
dsb).PHP
PHP
Module (php5-json, php5-curl, php5-mcrypt, php5-sessionDabr
, yg diperlukan hanya Consumer key
dan Consumer secret
, kita letakan di config.php
.budsz:~/a$ fetch http://dabr.googlecode.com/files/dabr-r430.zip dabr-r430.zip
budsz:~/a$ ls -l
total 88
drwxr-xr-x 3 budsz poison 512 Sep 25 14:31:38 2012 .
drwxr-xr-x 26 budsz poison 1536 Sep 25 14:30:47 2012 ..
drwxr-xr-x 5 budsz poison 512 Sep 25 14:31:34 2012 dabr
-rw-r--r-- 1 budsz poison 82709 Aug 16 19:15:20 2011 dabr-r430.zip
budsz:~/a$ unzip dabr-r430.zip
Archive: dabr-r430.zip
d dabr
extracting: dabr/.htaccess
extracting: dabr/.project
extracting: dabr/about.html
d dabr/browsers
extracting: dabr/browsers/bigtouch.css
extracting: dabr/browsers/bigtouch.php
extracting: dabr/browsers/blackberry.php
extracting: dabr/browsers/desktop.php
extracting: dabr/browsers/list.csv
extracting: dabr/browsers/text.php
extracting: dabr/browsers/touch.css
extracting: dabr/browsers/touch.js
extracting: dabr/browsers/touch.php
extracting: dabr/browsers/worksafe.php
d dabr/common
extracting: dabr/common/advert.php
extracting: dabr/common/Autolink.php
extracting: dabr/common/browser.php
extracting: dabr/common/Embedly.php
extracting: dabr/common/Extractor.php
extracting: dabr/common/HitHighlighter.php
extracting: dabr/common/lists.php
extracting: dabr/common/menu.php
extracting: dabr/common/OAuth.php
extracting: dabr/common/Regex.php
extracting: dabr/common/settings.php
extracting: dabr/common/theme.php
extracting: dabr/common/twitter.php
extracting: dabr/common/user.php
extracting: dabr/config.sample.php
d dabr/images
extracting: dabr/images/dabr.png
extracting: dabr/images/dm.png
extracting: dabr/images/dmL.png
extracting: dabr/images/map.png
extracting: dabr/images/mapL.png
extracting: dabr/images/q.png
extracting: dabr/images/qL.png
extracting: dabr/images/reply.png
extracting: dabr/images/replyall.png
extracting: dabr/images/replyallL.png
extracting: dabr/images/replyL.png
extracting: dabr/images/retweet.png
extracting: dabr/images/retweeted.png
extracting: dabr/images/retweetedL.png
extracting: dabr/images/retweetL.png
extracting: dabr/images/star.png
extracting: dabr/images/starL.png
extracting: dabr/images/star_grey.png
extracting: dabr/images/star_greyL.png
extracting: dabr/images/trash.gif
extracting: dabr/images/trashL.png
extracting: dabr/images/twitter_button_2_lo.gif
extracting: dabr/index.php
Rubah permission untuk setiap filenya dulu:budsz:~/a/$ cd dabr
budsz:~/a/dabr$ find . -type f -exec chmod 644 *.* {} \;
budsz:~/a/dabr$ cp config.sample.php config.php
Edit file config.php
, isi dengan data-data yg sudah didapatkan ketika kita registrasi apps di Twitter:// OAuth consumer and secret keys. Available from http://twitter.com/oauth_clients
define('OAUTH_CONSUMER_KEY', 'Isi_dengan_Consumer_key_anda');
define('OAUTH_CONSUMER_SECRET', 'Isi_dengan_Consumer_secret_anda');
Sisanya bisa anda setting sesuai dengan kebutuhan anda seperti
// API key for Twitpic - sign up at http://dev.twitpic.com/
define('TWITPIC_API_KEY', '');
// bit.ly login and API key for URL shortening
define('BITLY_LOGIN', '');
define('BITLY_API_KEY', '');
Setelah itu kita perlu melakukan Rewrite
dari webserver kita, tergantung webserver apa yang anda pake, saya menggunakan Lighttpd
dengan syntax
sbb:$HTTP["host"] =~ "subdomain\.domain\.tld" {
dir-listing.exclude = ( "favicon.ico" )
server.document-root = "/path/to/wwwdir"
url.rewrite-if-not-file = (
"^/w/(.*)\?(.*)$" => "/w/index.php?q=$1&$2",
"^/w/(.*)$" => "/w/index.php?q=$1",
)
}
DONE!
"The Minimalist Twitter API for Python is a Python API for Twitter, everyone's favorite Web 2.0 Facebook-style status updater for people on the go"
.login
di shell
lalu lakukan download dan pengekstrakan:
budsz:~$ fetch http://pypi.python.org/packages/source/t/twitter/twitter-1.8.0.tar.gz
budsz:~$ tar zxvf twitter-1.8.0.tar.gz
Sehingga terbentuk direktori twitter-1.8.0
budsz:~$ ls -ld twitter-*
drwxr-xr-x 6 budsz poison 512 Jul 22 15:27:08 2012 twitter-1.8.0
Oauth twitter
. Disini saya tidak akan menjelaskan pembuatan Twitter API, silahkan ngerefer ke site Twitter Developers. Pertama silahkan edit file:budsz:~$ vim twitter-1.8.0/twitter/cmdline.py
CONSUMER_KEY
dan CONSUMER_SECRET
, isi nilainya dengan Apps
yang sudah anda buat sebelomnya.CONSUMER_KEY='your_consumer_key'
CONSUMER_SECRET='your_consumer_secret'
SetupTools
, silahkan sesuaikan dengan kebutuhan anda. Selanjutnya tinggal lakukan proses penginstalan dengan root
access untuk SetupTools/twitter-1.8.0.tar.gz
:root:~# cd /usr/ports/devel/py-setuptools
root:~# make install clean
root:~# pkg_info | grep py26
py26-setuptools-0.6c11_3 Download, build, install, upgrade, and uninstall Python packages
root:~# easy_install ~budsz/twitter-1.8.0
Note: Jika anda tidak mempunyai Apps
silahkan langsung loncat proses instalasi saja yang anda kerjakan.budsz:~$ twitter -h (Untuk command line help)
budsz:~$ twitter (Login spt diweb, masukan user/password, setelah itu exit maka akan diminta PIN cukup tekan enter saja, defaultnya disimpan di ~$HOME/$USER/.twitter_oauth)
Untuk menggunakan di console/shell
:budsz:~$ twitter set "Hello World!" (Posting new twit)
budsz:~$ twitter search "cinta" (Seaching keyworld di public)
budsz:~$ twitter rate
Remaining API requests: 350 / 350 (hourly limit)
Next reset in 3544s (Sun Jul 22 17:38:01 2012)
cron(8)
dan Shell scripting.
FLV
untuk streaming video LAN
. Sayangnya ada beberapa video bagus tapi berformat MP4
, nah permasalahannya bagaimana jika ingin menggunakan file berformat MP4
. Berikut saya akan share beberapa caranya, seperti biasa saya bertanya ke Google
, akhirnya dapet juga trik jitu.
Saya menggunakan Lighttpd
H264
MP4
-nya. Untuk mempercepat produktifitas saya menggunakan ports
saja.
Install Lighttpd
via ports
(Cukup dibuild
saja).root:~# cd /usr/ports/www/lighttpd
root:/usr/ports/www/lighttpd# make
Download module versi terakhir:root:~# fetch http://h264.code-shop.com/download/lighttpd-1.4.18_mod_h264_streaming-2.2.9.tar.gz
root:~# tar zxvf lighttpd-1.4.18_mod_h264_streaming-2.2.9.tar.gz
root:~# cd lighttpd-1.4.18/src/
root:~# cp mod_h264_streaming.c /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp mod_streaming_export.h /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp moov.c /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp moov.h /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp mp4_io.c /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp mp4_io.h /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp mp4_reader.c /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp mp4_reader.h /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp mp4_writer.c /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp mp4_writer.h /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp mp4_process.c /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp mp4_process.h /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp output_bucket.c /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp output_bucket.h /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp output_mp4.c /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp output_mp4.h /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
Tambahkan Makefile.am
di /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
lib_LTLIBRARIES += mod_h264_streaming.la
mod_h264_streaming_la_SOURCES = mod_h264_streaming.c \
mod_streaming_export.h \
moov.c moov.h \
mp4_io.c mp4_io.h \
mp4_reader.c mp4_reader.h \
mp4_writer.c mp4_writer.h \
mp4_process.c mp4_process.h \
output_bucket.c output_bucket.h \
output_mp4.c output_mp4.h
mod_h264_streaming_la_CFLAGS = $(AM_CFLAGS) -DBUILDING_H264_STREAMING
mod_h264_streaming_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
mod_h264_streaming_la_LIBADD = $(common_libadd)
Lakukan penginstalan Lighttpd
root:/usr/ports/www/lighttpd# make install clean
Edit/tambahkan option yang diperlukan untuk lighttpd.conf
root:~# vim /usr/local/etc/lighttpd/lighttpd.conf
server.modules = (....................
"mod_h264_streaming",
....................
)
# MP4 streaming
h264-streaming.extensions = ( ".mp4" )
Edit dan jalankan startup script
root:~# vim /usr/local/etc/rc.d/lighttpd
Edit : ${lighttpd_enable="NO"}
menjadi : ${lighttpd_enable="YES"}
root:~# /usr/local/etc/rc.d/lighttpd start
root:~# ps ax | grep lighttpd
72915 ?? S 0:00.74 /usr/local/sbin/lighttpd -f /usr/local/etc/lighttpd/lighttpd.conf
9444 p0 S+ 0:00.00 grep lighttpd
script
sederhana:budsz:~$ mkdir kav ; cd kav
budsz:~/kav$ cat kav.sh
#!/bin/sh
WGETBIN="wget -m -nH -N -R *.html"
BASEURL="ftp://dnl-00.geo.kaspersky.com"
CURDIR="/home/budsz/kav"
cd $CURDIR
for LISTDIR in \
AutoPatches/kav11 \
bases/apu \
bases/av/ark \
bases/av/emu \
bases/av/kdb/i386 \
bases/av/qscan \
bases/av/wa \
bases/blst \
bases/dnscln \
bases/ids \
bases/info \
bases/klifppcfg \
bases/ksn \
bases/pdm \
bases/sco/i386/win \
bases/ssa \
bases/sw2 \
bases/uds \
bases/upd \
bases/vlns \
bases/wmuf \
diffs/bases/apu \
diffs/bases/av/emu/i386 \
diffs/bases/av/kdb/i386 \
diffs/bases/blst \
diffs/bases/dnscln \
diffs/bases/klifppcfg \
diffs/bases/ksn \
diffs/bases/pdm \
diffs/bases/sco/i386/win \
diffs/bases/uds \
diffs/bases/wmuf \
index
do
# Looping untuk downloading
$WGETBIN $BASEURL/$LISTDIR
echo "----------------------------------"
echo " Mirroring beres untuk: "$LISTDIR
echo "----------------------------------"
done
# Hapus file '.listing'
find . -name ".listing" -delete
Script itu diberi nama kav.sh
, lalu disimpan di directory kav
. Setelah itu dijalankan secara automatic dengan menggunakan cron
:budsz:~$ crontab -l
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/root/
SHELL=/bin/sh
MAILTO=""
HOME=/var/log
0 7 * * * /home/budsz/kav/kav.sh > /dev/null
Setiap jam 7.00 melakukan update dengan main server. Biar lebih enak dilihat, anda bisa bikin virtual domain/host di lighttpd.conf/code>:
$HTTP["host"] =~ "av\.example\.net" {
dir-listing.exclude = ( "favicon.ico" )
server.document-root = "/home/budsz/kav"
}
Dan A Record
atau CNAME
di Bind
:
budsz:~$ host av.example.net
av.example.net has address 172.16.135.145
Setelah selesai tinggal arahkan setting update server pada Kaspersky Antivirus:
porthttp = "80" # HTTP Port
portsquid = "7080" # Squid Port
ifint0 = "rl0" # Ethernet ke LAN
rdr pass on $ifint0 proto tcp from 192.168.0.0/24 to any port $porthttp -> $ipproxy port $portsquid
Rules diatas berguna untuk Redirection (RDR)/Transparent Proxy. Lalu saya mempunyai rules spt ini:ipwebmodem = "{ 10.0.0.1/32, 10.1.0.1/32 }"
block in quick on $ifint0 proto tcp from 192.168.0.0/24 to $ipwebmodem port = 80
table { 0.0.0.0/0, !10.0.0.0/30, !10.1.0.0/30 }
porthttp = "80" # HTTP Port
portsquid = "7080" # Squid Port
ifint0 = "rl0" # Ethernet ke LAN
rdr pass on $ifint0 proto tcp from 192.168.0.0/24 to port $porthttp -> $ipproxy port $portsquid
ipwebmodem = "{ 10.0.0.1/32, 10.1.0.1/32 }"
block in quick on $ifint0 proto tcp from 192.168.0.0/24 to $ipwebmodem port = 80
ipfw(8)
" :-(. Berikut salah satu study-casenya:${fwcmd} add 30 fwd ${ipproxy},${portproxy} tcp from ${ipclproxy} to any dst-port ${porthttp} in via ${ifint0}
${fwcmd} add 52 pipe 2 ip from any to ${ipclient} via ${ifint0}
${fwcmd} add 53 pipe 3 ip from ${ipclient} to any via ${ifint0}
${fwcmd} pipe 2 config bw ${bwcldown} mask dst-ip 0xffffffff
${fwcmd} pipe 3 config bw ${bwclup} mask src-ip 0xffffffff
${fwcmd} add 52 pipe 2 ip from any to ${ipclient} via ${ifint0}
${fwcmd} add 53 pipe 3 ip from ${ipclient} to any via ${ifint0}
${fwcmd} pipe 2 config bw ${bwcldown} mask dst-ip 0xffffffff
${fwcmd} pipe 3 config bw ${bwclup} mask src-ip 0xffffffff
${fwcmd} add 70 fwd ${ipproxy},${portproxy} tcp from ${ipclproxy} to any dst-port ${porthttp} in via ${ifint0}
sysctl
variable net.inet.ip.fw.one_pass=0
, dengan ini artinya "paket yg masuk melalui dummynet
/pipedummynet
harus sebelom rule transparent proxy ( Ruleset no 2 ). ( Big Thank To: Ian Smith
You'll remember me when the west wind moves upon the fields of barley
You'll forget the sun in his jealous sky as we walk in fields of gold
So she took her love for to gaze awhile upon the fields of barley
In his arms she fell as her hair came down among the fields of gold
Will you stay with me, will you be my love among the fields of barley?
We'll forget the sun in his jealous sky as we lie in fields of gold
See the west wind move like a lover so upon the fields of barley.
Feel her body rise when you kiss her mouth among the fields of gold
I never made promises lightly and there have been some that I've broken
But I swear in the days still left we'll walk in fields of gold
We'll walk in fields of gold
Many years have passed since those summer days among the fields of barley
See the children run as the sun goes down among the fields of gold
You'll remember me when the west wind moves upon the fields of barley
You can tell the sun in his jealous sky when we walked in fields of gold
When we walked in fields of gold, when we walked in fields of gold
DNS
request dan successful query. Pertama-tama ada perbedaan generate log stats
untuk beberapa versi dari Bind
. Disini saya menggunakan versi BIND 9.8.1-P1
.named.conf
bagian options
pastikan ada entry spt ini:
statistics-file "/var/stats/named.stats";
Setelah itu bikin sedikit script
sederhana kurang lebih seperti ini:#!/bin/sh
STATSTMP="/tmp/dnsstats"
STATSFILE="/var/named/var/stats/named.stats"
OLDQ=`grep QUERY $STATSFILE | awk '{print $1}'`
OLDS=`grep successful $STATSFILE | awk '{print $1}'`
rm -f /var/named/var/stats/named.stats
rndc stats
NEWQ=`grep QUERY $STATSFILE | awk '{print $1}'`
NEWS=`grep successful $STATSFILE | awk '{print $1}'`
DIFFQ=$(($NEWQ-$OLDQ))
DIFFS=$(($NEWS-$OLDS))
echo $DIFFQ
echo $DIFFS
chmod 755
. Bikin entry di file CFG MRTG
anda kurang lebih spt ini:Target[dnsstat]: `/usr/local/bin/dnsstat`
Title[dnsstat]: DNS Query/Success Answer
Colours[dnsstat]: DODGERBLUE#1E90FF,BLUE#0000FF,DODGERBLUE#1E90FF,BLUE#0000FF
RouterUptime[dnsstat]: local@localhost
MaxBytes[dnsstat]: 800
AbsMax[dnsstat]: 800
YTics[dnsstat]: 10
PageTop[dnsstat]: DNS Query/Success Answer
YLegend[dnsstat]: Query/Answer
ShortLegend[dnsstat]: Query/5 Min
LegendI[dnsstat]: Query
LegendO[dnsstat]: Answer
Options[dnsstat]: gauge, growright, avgpeak, integer, absolute, pngdate
IPFW
dan seperti biasa hasilnya saya phasing ke MRTG
. Tapi kendalanya packet selalu bertambah jumlahnya sesuai dengan output rules dari IPFW
; dengan ini grafik yang dihasilnya bersifat naik terus sampe ketika mesin reboot
barulah ia kembali ke nol. Jadi, perhitungan rata-rata packet yang masuk/keluar lewat router per-satuan waktu tidak didapatkan alias tidak dinamis. Barulah setelah saya ingat beberapa teknik lama pemograman yaitu dengan variable dummy
dengan mencatat packet awal/akhir, lalu dihitung selisihnya per-satuan waktu, hasil grafik terlihat lebih manusiawi :-).
Ini adalah satu contoh sederhana scripting
yang saya buat:#!/bin/sh
# TmpFile
TEMPFILE="/tmp/ipfw.tu"
# TCP/UDP grab to file
OLDT1=`ipfw -a list | grep 00300 > $TEMPFILE`
OLDT2=`ipfw -a list | grep 00301 >> $TEMPFILE`
OLDT3=`ipfw -a list | grep 00302 >> $TEMPFILE`
OLDT4=`ipfw -a list | grep 00303 >> $TEMPFILE`
OLDU1=`ipfw -a list | grep 00400 >> $TEMPFILE`
OLDU2=`ipfw -a list | grep 00401 >> $TEMPFILE`
OLDU3=`ipfw -a list | grep 00402 >> $TEMPFILE`
OLDU4=`ipfw -a list | grep 00403 >> $TEMPFILE`
# Fetch old packets
OLDTI1=`grep 00300 $TEMPFILE | awk '{print $2}'`
OLDTI2=`grep 00301 $TEMPFILE | awk '{print $2}'`
OLDTI3=`grep 00302 $TEMPFILE | awk '{print $2}'`
OLDTI4=`grep 00303 $TEMPFILE | awk '{print $2}'`
OLDTO1=`grep 00300 $TEMPFILE | awk '{print $3}'`
OLDTO2=`grep 00301 $TEMPFILE | awk '{print $3}'`
OLDTO3=`grep 00302 $TEMPFILE | awk '{print $3}'`
OLDTO4=`grep 00303 $TEMPFILE | awk '{print $3}'`
OLDUI1=`grep 00400 $TEMPFILE | awk '{print $2}'`
OLDUI2=`grep 00401 $TEMPFILE | awk '{print $2}'`
OLDUI3=`grep 00402 $TEMPFILE | awk '{print $2}'`
OLDUI4=`grep 00403 $TEMPFILE | awk '{print $2}'`
OLDUO1=`grep 00400 $TEMPFILE | awk '{print $3}'`
OLDUO2=`grep 00401 $TEMPFILE | awk '{print $3}'`
OLDUO3=`grep 00402 $TEMPFILE | awk '{print $3}'`
OLDUO4=`grep 00403 $TEMPFILE | awk '{print $3}'`
# Clean TmpFile
rm -f $TEMPFILE
# Summ TCP old packets
SOLDTIO=$(($OLDTI1+$OLDTI2+$OLDTI3+$OLDTI4 \
+$OLDTO1+$OLDTO2+$OLDTO3+$OLDTO4))
# Summ UDP old packets
SOLDUIO=$(($OLDUI1+$OLDUI2+$OLDUI3+$OLDUI4 \
+$OLDUO1+$OLDUO2+$OLDUO3+$OLDUO4))
# Fetch TCP curr packets
NEWTI1=`ipfw -a list | grep 00300 | awk '{print $2}'`
NEWTI2=`ipfw -a list | grep 00301 | awk '{print $2}'`
NEWTI3=`ipfw -a list | grep 00302 | awk '{print $2}'`
NEWTI4=`ipfw -a list | grep 00303 | awk '{print $2}'`
NEWTO1=`ipfw -a list | grep 00300 | awk '{print $3}'`
NEWTO2=`ipfw -a list | grep 00301 | awk '{print $3}'`
NEWTO3=`ipfw -a list | grep 00302 | awk '{print $3}'`
NEWTO4=`ipfw -a list | grep 00303 | awk '{print $3}'`
# Summ TCP curr packets
SNEWTIO=$(($NEWTI1+$NEWTI2+$NEWTI3+$NEWTI4 \
+$NEWTO1+$NEWTO2+$NEWTO3+$NEWTO4))
# Fetch UDP curr packets
NEWUI1=`ipfw -a list | grep 00400 | awk '{print $2}'`
NEWUI2=`ipfw -a list | grep 00401 | awk '{print $2}'`
NEWUI3=`ipfw -a list | grep 00402 | awk '{print $2}'`
NEWUI4=`ipfw -a list | grep 00403 | awk '{print $2}'`
NEWUO1=`ipfw -a list | grep 00400 | awk '{print $3}'`
NEWUO2=`ipfw -a list | grep 00401 | awk '{print $3}'`
NEWUO3=`ipfw -a list | grep 00402 | awk '{print $3}'`
NEWUO4=`ipfw -a list | grep 00403 | awk '{print $3}'`
# Summ UDP curr packets
SNEWUIO=$(($NEWUI1+$NEWUI2+$NEWUI3+$NEWUI4 \
+$NEWUO1+$NEWUO2+$NEWUO3+$NEWUO4))
# Diff old/curr packets
DIFFTIO=$(($SNEWTIO-$SOLDTIO))
DIFFUIO=$(($SNEWUIO-$SOLDUIO))
# Prob all result
echo $DIFFTIO
echo $DIFFUIO
MRTG
atau RRDTool
. Dibawah ini saya coba menggunakan MRTG
:Target[ipfw.tu]: `/usr/local/bin/ipfw.tu`
Title[ipfw.tu]: IPFW TCP/UDP Packets Summary
Colours[ipfw.tu]: DODGERBLUE#1E90FF,BLUE#0000FF,DODGERBLUE#1E90FF,BLUE#0000FF
RouterUptime[ipfw.tu]: local@localhost
MaxBytes[ipfw.tu]: 30000
AbsMax[ipfw.tu]: 30000
YTics[ipfw.tu]: 10
PageTop[ipfw.tu]: IPFW TCP/UDP Packets Summary
YLegend[ipfw.tu]: Packets/5 Min
ShortLegend[ipfw.tu]:
LegendI[ipfw.tu]: TCP
LegendO[ipfw.tu]: UDP
Legend1[ipfw.tu]:
Legend2[ipfw.tu]:
Options[ipfw.tu]: gauge, growright, avgpeak, integer, absolute, pngdate