Блогът на Борис Димитров

freebsd , linux , system & network admin blog
  • Home
  • За мен

Posts Tagged ‘полезно’

15 фев 2010

Mount /usr/ports във Freebsd Jail

Имам 3 Jail-a искам да си инсталирам и в 3те нещо от /usr/ports :

mount_nullfs /usr/ports/ /usr/jails/ns/usr/ports
mount_nullfs /usr/ports/ /usr/jails/mail/usr/ports
mount_nullfs /usr/ports/ /usr/jails/www/usr/ports

15 февруари, 2010 at 14:36 by admin

Tags: admin, Freebsd, shell, полезно
Posted in Freebsd, Servers | No Comments »

9 фев 2010

shell recursive rename

Ако искаме да сменим ‘foo’ с ‘bar’ в имената на ВСИЧКИ (recursive) файлове в даден директория :

Само принтира промените :
find . -type f -print0 | xargs -0 rename -n ’s/foo/bar/g’

Прави промените :
find . -type f -print0 | xargs -0 rename ’s/foo/bar/g’

9 февруари, 2010 at 13:10 by admin

Tags: admin, полезно
Posted in Freebsd, Linux | No Comments »

8 фев 2010

shell find & replace recursive

Много мразя като ми се налага да променям едно и също нещо в много различни файлове !
Затова е следният ред :

find * -type f -exec sed -i ’s/ТОВА ТЪРСИМ/ПРОМЕНЯМЕ С ТОВА/’ {} \;

Казах ли колко обичам sed ?

8 февруари, 2010 at 19:51 by admin

Tags: admin, Freebsd, Linux, полезно
Posted in Freebsd, Linux, Без категория | No Comments »

7 яну 2010

PHP-конвертиране на число в дума

Много полезен PHP клас за конвертиране на число в дума – по нета има и други скриптове но този членува правилно думите на български .


class TextualNumber
{
    var $units  = array();
    var $teens  = array();
    var $hundredth = array();
    var $tens   = array();
    var $suffix = array();

    function TextualNumber()
    {
        $this->units  = array('нула', 'едно', 'две', 'три', 'четери', 'пет', 'шест', 'седем', 'осем',
'девет');
        $this->teens  = array('десет', 'единадесет', 'дванадесет', 'тринадесет',
'четеринадесет', 'петнадесет', 'шестнадесет', 'седемнадесет',
'осемнадесет', 'деветнадесет');
        $this->hundredth =
array(1=>'сто','двеста','триста','четеристотин','петстотин','шестстотин','седемстотин',
'осемстотин','деветстотин');
        $this->tens   = array(2 => 'двадесет', 'тридесет', 'четеридесет', 'петдесет',
'шестдесет', 'седемдесет', 'осемдесет', 'деветдесет');
        $this->suffix = array('хиляди', 'милиона', 'милиарда', 'trillion', 'quadrillion');
    }

    /*
    * @param  string $int The number to convert. Optional.
    * @return text        Resulting text
    */
    function ToString($int)
    {
        // Check for purely numeric chars
        if (!preg_match('#^[\d.]+$#', $int)) {
            echo('Невалидни символи! Моля въведете числова стойност.');
            return;
        }

        // Handle decimals
        if (strpos($int, '.') !== false) {
            $decimal = substr($int, strpos($int, '.') + 1);
            $int     = substr($int, 0, strpos($int, '.'));
        }

        // Lose insignificant zeros
        $int = ltrim($int, '0');

        // Check for valid number
        if ($int == '') {
            $int = '0';
        }

        // Lose the negative, don't use abs() so as to allow large numbers
        if ($negative = ($int < 0)) {
            $int = substr($int, 1);
        }

        // Number too big?
        if (strlen($int) > 18) {
            //throw new Exception('Out of range');
            echo('Числото е повече от 18 символа!');
            return;
        }

        // Keep original number
        $orig = $int;

        /**
        * Main number deciphering bit thing
        */
        switch (strlen($int)) {

            // Single digit number
            case '1':
                $text = $this->units[$int];
                break;

            // Two digit number
            case '2':
                if ($int{0} == '1') {
                    $text = $this->teens[$int{1}];

                } else if ($int{1} == '0') {
                    $text = $this->tens[$int{0}];
                    if($this->flag == 3) $text = 'и '.$text;
                    echo $this->flag."";
                    $this->flag = 0;
                } else {
                    $text = $this->tens[$int{0}] . ' и ' . $this->units[$int{1}];
                }
                break;

            // Three digit number
            case '3':
                if ($int % 100 == 0) {
                    $text = $this->hundredth[$int{0}];
                } else {
                    $int_tmp = substr($int, 1);
                    if($int_tmp{0} == '0' || $int_tmp{0} == '1') $add = 'и';
                    $this->flag = 3;
                    $text = $this->hundredth[$int{0}] . " $add " . $this->GetText(substr($int, 1));
                }
                break;

            // Anything else
            default:
                $pieces      = array();
                $suffixIndex = 0;

                // Handle the last three digits
                $num = substr($int, -3);
                if ($num > 0) {
                    $pieces[] = $this->GetText($num);
                }
                $int = substr($int, 0, -3);
                // Now handle the thousands/millions etc
                while (strlen($int) > 3) {
                    $num   = substr($int, -3);
                    if ($num > 0) {
                        $pieces[] = $this->GetText($num) . ' ' . $this->suffix[$suffixIndex];
                    }
                    $int = substr($int, 0, -3);
                    $suffixIndex++;
                }

                if (substr($int, -3) == 1)
                {
                    $t = $this->suffix[$suffixIndex];
                    if($suffixIndex == 0 && $int == 1) $ending = 'а';
                    else $preff = 'един ';
                    $pieces[] = $preff . substr($t,0,-2) . $ending;
                }
                else
                {
                    $pieces[] = $this->GetText($int) . ' ' . $this->suffix[$suffixIndex];
                }
                /**
                * Figure out whether we need to add "and" in there somewhere
                */
                $pieces = array_reverse($pieces);

                if (count($pieces) > 1 AND strpos($pieces[count($pieces) - 1], ' и ') === false) {
                    $pieces[] = $pieces[count($pieces) - 1];
                    $pieces[count($pieces) - 2] = 'и';
                }

                // Create the text
                $text = implode(' ', $pieces);

                // Negative number?
                if ($negative) {
                    $text = 'минус ' . $text;
                }
                break;
        }

        /**
        * Handle any decimal part
        */
        if (!empty($decimal)) {
            $pieces  = array();
            $decimal = preg_replace('#[^0-9]#', '', $decimal);

            /*
            for ($i=0, $len=strlen($decimal); $i<$len; ++$i) {
                $pieces[] = $this->teens[$decimal{$i}];
            }
            */

            if(strlen($decimal) == '1')
            {
                $text .= ' лева и ' . $this->tens[$decimal{0}];
                $text .= ' стотинки. ';
            }

            else
            {
                $text .= ' лева и ' . $this->GetText($decimal);
                $text .= ' стотинки. ';
            }

	}

        return $text;
    }

    /**
    * Returns text for given number. Parameter should ideally
    * be a string (to handle large numbers) though integers are
    * OK.
    *
    * @param  string $int Number to convert
    * @return string      Resulting textual representation
    */
    function GetText($int)
    {
        return $this->ToString($int);
    }

    /**
    * Returns text and number for a randomly generated number.
    *
    * @return array Array of number and textual representation
    */
    function Get()
    {
        $int = mt_rand(1, 99999);
        return array($int, $this->ToString($int));
    }

    /**
    * Returns currency version of a given number.
    *
    * @param  string $int   Number to convert
    * @param  string $major Word to use for left hand side of decimal point
    * @param  string $minor Word to use for right hand side of decimal point
    * @return string        Resulting string
    */
    function GetCurrency($int, $major = 'pound', $minor = 'pence')
    {
        if (strpos($int, '.') !== false) {
            $left  = substr($int, 0, strpos($int, '.'));
            $right = substr($int, strpos($int, '.') + 1);

            // Plural $major ?
            if ((int)abs($left) != 1) {
                $major .= 's';
            }

            $text  = $this->GetText($left) . " $major and " . $this->GetText($right) . " $minor";

        } else {
            $text = $this->GetText($int) . " $major";
        }

        return $text;
    }
}

Как да го ползваме ?


require_once("number2textBG.class.php");
$number = '12345678';
$t2n = new TextualNumber;
$txt = $t2n->GetText($number);
echo $txt;
?>

Източник – http://webstik.com/blog/page/kak-da-preobrazuvame-chislova-stoynost-v-dumi-chrez-php.html

7 януари, 2010 at 11:45 by admin

Tags: PHP, полезно
Posted in PHP | No Comments »

9 сеп 2009

virtualbox-ose и freebsd7.2 guest OS

Ако ви се наложи да инсталирате Freebsd7.x под VirtalBox-OSE този ред със сигурност ще ви спести доста нерви :

# vboxmanage modifyvm VM_NAME -nictype1 Am79C970A

Явно FreeBSD имат някакъв проблем с емулацията на networking-а във VirtualBOX , но както и да е – този ред решава проблема :)

Повече инфо има тук :
click

9 септември, 2009 at 4:10 by admin

Tags: Freebsd, полезно
Posted in Freebsd | No Comments »

3 юни 2009

Скрипт за проверка дали даден процес е жив

Леко скриптче за проверка дали даден процес е жив (в случая snmpd) :

#!/bin/bash

hostname=b2.sysadmins-bg.net
email=billy@microsoft.com
snmpd_test=`pgrep snmpd`

# SNMPD TEST
if [ $snmpd_test != 1 ]
then
echo `echo host $hostname report: SNMPD DAEMON NOT RUNNING !!!|mail -s CHECK-IT-NOW $email`
fi

в crontab на 5 минути:

*/5 * * * * check-snmpd.sh > /dev/null 2>&1

толкоз .

3 юни, 2009 at 10:19 by admin

Tags: admin, Linux, Servers, полезно
Posted in Linux, Servers | No Comments »

18 мар 2009

Как се добавят VLANs (802.1q) на FreeBSD

Доста елементарно се оказа но поради факта , че не ми се беше налагало – не го знаех :) ))
Искаме влан 100 да си го разтагнем на BSD машинката и да му вдигнем IP адрес – какво правим ?
Ето това :

Зареждаме модула в ядрото :

# kldload if_vlan

Създаваме VLAN-а :

# ifconfig vlan100 create

Вдигаме му IP адрес :

# ifconfig vlan100 10.17.0.71 netmask 255.255.255.252 vlan 100 vlandev nve0

И всичко спи :)

18 март, 2009 at 13:45 by admin

Tags: Freebsd, полезно
Posted in Networking, Servers | No Comments »

12 мар 2009

FreeBSD jails

Intro :
FreeBSD е операционна система с отворен код , поне според мен най-подходяща за изграждане на сървъри , но също и с много добре развити мрежови приложения – перфектна за PPPoE концентратори или друг вид рутери да речем , като цяло доста стабилна операционна система с много възможности за настройки и много инструменти в помощ на системния администратор.Не на последно място ще кажа че проекта FreeBSD има изключително добра подръжка и много ама найстина много документация .

Какво е jail ?
Основната идея на jail-а е да повиши сигурността на системата като отдели един или повече процеси от другите и ги постави в chroot(2) среда. Чрез chroot(8) можем да променим root директорията на поредица процеси като ги отделим в сигурна среда от другите. Да речем , че недобронамерен потребител направи успешен exploit върху уязвим процес пуснат в jail и успешно компроментира системата , това няма да повлияе на цялата система както сами се досещате, а атакуващия ще има достъп само до процесите пуснати в jail-a. Разбира се има начини да се избяга от chroot средата, но за по-прости задачи (като service jails) e доста мощен инструмент.
Като цяло командата jail(8) служи за контрол над създадените jails.
Разбира се всички тези неща са доста добре обяснени във онлайн документацията на http://www.freebsd.org/doc/en/books/handbook/ , но основната ми идея е да ви покажа накратко как да си направите няколко service jails.

Изграждане на jails :

Тук ще ви покажа един елементарен пример за шаблон , лично аз използвам най-вече service jails – накратко това означава, че не е нужно да се прави пълен installworld на всеки jail. В този пример искаме крайният резултат да бъде HTTP, DNS и SMTP сървайси в отделни jails.Ще ни трябва една машина която ще наричаме хост и на която ще пуснем тези сървайси.На машината за примера имаме чисто нова инсталация на FreeBSD 6.3 със инсталиран пакет source , можете да вземете нужния сорс чрез :

#sysinstall -> configure -> distributions -> src

И така , да започваме :)

Кратко обяснение :

  • Всеки jail ще бъде монтиран в /home/services.
  • /home/services/ro е темплейта и read-only partition за всеки jail
  • Празна директория за всеки jail ще бъде създадена тук : /home/services
  • Всеки jail ще има директория /rw , която ще бъде линкната към read-write частта от jaila
  • Всеки jail ще има собствена read-write която се базира на /home/services/skel.
  • Всеки jailspace (read-write частта от всеки jail) трябва да бъде създадена /home/jails.

Сздаване на read-only темплейта :
* може да се наложи да инсталирате sysutils/cpdup на хост системата.

# mkdir /home/services /home/services/ro
# cd /usr/src
# make installworld DESTDIR=/home/services/ro
# cd /home/services/ro
# mkdir usr/ports
# portsnap -p /home/services/ro/usr/ports fetch extract
# cpdup /usr/src /home/services/ro/usr/src
# mkdir /home/services/skel /home/services/skel/home /home/services/skel/usr-X11R6 /home/services/skel/distfiles
# mv etc /home/services/skel
# mv usr/local /home/services/skel/usr-local
# mv tmp /home/services/skel
# mv var /home/services/skel
# mv root /home/services/skel
# mergemaster -t /home/services/skel/var/tmp/temproot -D /home/services/skel -i
# cd /home/services/skel
# rm -R bin boot lib libexec mnt proc rescue sbin sys usr dev
# cd /home/services/ro
# mkdir rw
# ln -s rw/etc etc
# ln -s rw/home home
# ln -s rw/root root
# ln -s ../rw/usr-local usr/local
# ln -s ../rw/usr-X11R6 usr/X11R6
# ln -s ../../rw/distfiles usr/ports/distfiles
# ln -s rw/tmp tmp
# ln -s rw/var var
# echo "WRKDIRPREFIX?= /rw/portbuild" > /home/services/skel/etc/make.conf

ако всички тези операции минат успешно е време да добавите в /etc/fstab следните неща :

/home/services/ro /home/services/ns nullfs ro 0 0
/home/services/ro /home/services/mail nullfs ro 0 0
/home/services/ro /home/services/www nullfs ro 0 0
/home/jails/ns /home/services/ns/rw nullfs rw 0 0
/home/jails/mail /home/services/mail/rw nullfs rw 0 0
/home/jails/www /home/services/www/rw nullfs rw 0 0

след това добавяме в /etc/rc.conf следните редове :

jail_enable="YES"
jail_set_hostname_allow="NO"
jail_list="ns mail www"
jail_ns_hostname="ns.example.org"
jail_ns_ip="192.168.3.17"
jail_ns_rootdir="/usr/home/services/ns"
jail_ns_devfs_enable="YES"
jail_mail_hostname="mail.example.org"
jail_mail_ip="192.168.3.18"
jail_mail_rootdir="/usr/home/services/mail"
jail_mail_devfs_enable="YES"
jail_www_hostname="www.example.org"
jail_www_ip="192.168.3.19"
jail_www_rootdir="/usr/home/services/www"
jail_www_devfs_enable="YES"

* За вески jail трябва да сме предвидили ip адрес – това е задължително (без значение частен или публичен)
* Сигурно ви прави впечатление че тука заместваме /home/services/ със /usr/home/services , това е така защото във FreeBSD директорията /home е линк към /usr/home

Да продължим нататък като създадем тези папки :


# mkdir /home/services/ns /home/services/mail /home/services/www
# mkdir /home/jails
# cpdup /home/services/skel /home/jails/ns
# cpdup /home/services/skel /home/jails/mail
# cpdup /home/services/skel /home/jails/www

И накрая :

# mount -a
# /etc/rc.d/jail start

Ако всичко е наред би трябвало да имате три стартирани jail-a (можете да проверите това с jls(8)):
# jls
JID IP Address Hostname Path
3 192.168.3.17 ns.example.org /home/services/ns
2 192.168.3.18 mail.example.org /home/services/mail
1 192.168.3.19 www.example.org /home/services/www

Всичко изглежда наред , сега можете да се логнете да речем в jail с ID 3 (ns) с командата :

# jexec 3 csh

Това е всичко :)

12 март, 2009 at 14:05 by admin

Tags: admin, Freebsd, полезно
Posted in Servers | No Comments »

2 апр 2003

Apache Benchmark Testing

Тези дни ми се наложи да променям нещо по скриптовете на един от проектите по който работя , в случая исках да знам как ще се държи сървърът ми след промяна по накой от скриптовете . Решението е в инструмента ab (Apache Benchmark) който идва със Apache Web Server . Използва се много лесно и дава полезна информация (макар и не особено много) затова как се държи сървърът при определен брой заявки за определен период към определена страница от сайта ви. Имайте предвид че ab не емулира реално поведение на юзер на вашата страница , но може да ви помогне да разберете как сървърът ви поема заявките. Важно е да знаем , че не е препоръчително ab и сървърът който тестваме да са на един и същи хост , защото и двата процеса ще заемат ресурси (не много малко – зависи от машината) , и това със сигурност ще се отрази на резултатите. Има и доста други показатели от който зависят резултатите от теста, тъй че те не винаги ще бъдат абсолютно еднакви , затова най-добре би било да се сравняват тестовете след минимални промени по конфигурацията на уеб сървъра или скрипта по който сте работили и тествали . ab е доста лесна за ползване – в моя случая пуснах 1000 рекуеста (-n 1000) , по 10 наведнъж (-c 10):

$ab -n 1000 -c 10 http://b2.sysadmins-bg.net/test.html

Ето и резултата :

This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking b2.sysadmins-bg.net (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software: Apache
Server Hostname: b2.sysadmins-bg.net
Server Port: 80

Document Path: /test.html
Document Length: 20711 bytes

Concurrency Level: 10
Time taken for tests: 1178.201 seconds
Complete requests: 1000
Failed requests: 414
(Connect: 0, Receive: 0, Length: 414, Exceptions: 0)
Write errors: 0
Total transferred: 20892586 bytes
HTML transferred: 20710586 bytes
Requests per second: 0.85 [#/sec] (mean)
Time per request: 11782.007 [ms] (mean)
Time per request: 1178.201 [ms] (mean, across all concurrent requests)
Transfer rate: 17.32 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.7 0 7
Processing: 2638 11766 2444.4 11625 37576
Waiting: 1000 8787 1969.5 8759 28169
Total: 2639 11766 2444.3 11625 37576

Percentage of the requests served within a certain time (ms)
50% 11625
66% 12268
75% 12657
80% 12975
90% 13992
95% 14918
98% 16899
99% 18568

2 април, 2003 at 22:30 by admin

Tags: admin, Linux, Servers, полезно
Posted in Servers | No Comments »

  • Превод

  • Календар

    март 2010
    П В С Ч П С Н
    « фев    
    1234567
    891011121314
    15161718192021
    22232425262728
    293031  
  • Категории

    • Freebsd (5)
    • Linux (5)
    • Networking (1)
    • Perl (1)
    • PHP (1)
    • Servers (6)
    • Без категория (2)
    • България (2)
    • Лични (2)
    • Новини (1)
  • ИТ

    • Корпоративни интернет решения
  • Приятели

    • :: KnowHow by Sto. :: line-by-line on commandline
    • Instudio54 Lifestyle Online Radio
    • Блогът на Иван Тодоров
    • Институт за имунологично здраве, имунопрофилактика, имунотерапия и биологична терапия на рака “д-р Русчо Иконописов”
  • Реклами


Блогът на Борис Димитров powered by WordPress
Hosted at Sysadmins-bg.net
Design & code by Jonk
Entries (RSS) and Comments (RSS).
19 queryes | 2,157 seconds.