Архив Рубрики »Наше Творчество «

Shell Скрипты: три действия: диск, домен, правка конфигов

Данный скрипт заточен под работу из УСБ и ОС FreeBSD, он выполняет три действия:
1. разбивает диск
2. вгонят в домен
3. правит конфиги ;)

Охх длинный то …

#!/bin/sh

cd /tmp && rm -Rf * >/dev/null 2>&1

case $1 in
        stop)
        exit;
        ;;
        *)
        clear;
        echo > /tmp/rc.conf.jail
        /usr/sbin/ntpdate my-domain-name.local >/dev/null 2>&1 &
        ;;
esac

# rm tmp files
tmp_dir="/tmp/install"
/bin/rm -Rf ${tmp_dir}
/bin/mkdir -p ${tmp_dir}

# variables
root_size="256"         # Mb    384
swap_size="128" # Mb    1024
usr_size="2048"         # Mb    4096
var_size="1024"         # Mb    4096

# distrib directory
dist_dir="/dist/dist"

# debug - on = 1; off = 2
debug="2"
# install new server

# prompt user - restore or not?
echo "

!!!!!  Внимание  !!!!!
Если вы не понимаете что делаете, выньше флэшку и перезагрузите сервер.
Если вы введёте YES, начнётся инсталляция нового сервера, и все данные
содержащиеся на жёстком диске будут утеряны. Если вы введёте NO, установка
будет прервана, и произойдёт автоматическая перезагрузка.

Если вы не создали в BIOS контроллера массив (для сервера), введите NO
и создайте его, после этого, заново начните установку."
echo -n "Хотите ли вы начать установку: "
read answer
# verify answer
case ${answer} in
        [Yy][Ee][Ss])
        # согласен. продолжаем
        echo""
        echo "Инсталляция нового сервера запущена!"
        ;;
        *)
        # передумал :)
        echo "Вы ответили '${answer}'. Сервер перезагружается..."
        shutdown -r now
        exit;
        ;;
esac

# select - what installing
echo -n "

Для инсталляции почтового/файлового сервера введите 'S',
для инсталляции сервера архивации введите 'B'.
Введите ваш выбор:"
read server_type
case ${server_type} in
        [Ss])
        # сервак
        echo""
        echo "Инсталляция нового файлового/почтового сервера запущена!"
        echo "1" > ${tmp_dir}/server_type.txt
        ;;
        [Bb])
        # бэкап
        echo "Инсталляция нового сервера архивации запущена!"
        echo "2" > ${tmp_dir}/server_type.txt
        ;;
esac
server_type="`/bin/cat ${tmp_dir}/server_type.txt`"

input_function() {
# input name new server
echo "
Для успешной инсталляции, ответтьте пожалуйста на несколько вопросов

Введите имя сервера (имя вводится без доменного суффикса)."
echo -n "Имя: "
read server_name_user
server_name="`echo ${server_name_user} | /usr/bin/tr '[:upper:]' '[:lower:]'`"
# проверяем введённое
if [ ${server_name}x = 'x' ]
then
        # пустое имя.
        server_name="default"
fi
# input IP new server
echo -n "Введите IP адрес этого сервера: "
read server_IP
# проверяем введённое
if [ ${server_IP}x = 'x' ]
then
        # пустой адрес.
        server_IP="172.31.0.10"
fi
# input IP default gateway
echo -n "Введите адрес шлюза: "
read gateway_IP
if [ ${gateway_IP}x = 'x' ]
then
        # пустой гейт
        gateway_IP="172.31.0.1"
fi
# input IP default gateway
if [ ${server_type} -eq 1 ]; then
echo -n "Введите адрес сервера backup: "
read backup_IP
if [ ${backup_IP}x = 'x' ]
then
        # пустой гейт
        backup_IP="172.31.0.1"
fi
fi

# input admin user login
echo -n "Введите логин администратора филиала: "
read user_login
if [ ${user_login}x = 'x' ]
then
        # пустой логин
        user_login="lissyara"
fi
# input admin user login
echo -n "Введите ВАШ логин в домене: "
read user_join_login
if [ ${user_join_login}x = 'x' ]
then
        # пустой логин
        user_join_login="akeda"
fi
# input admin user login
echo -n "Введите OU филиала: "
read filial_OU
if [ ${filial_OU}x = 'x' ]
then
        # пустой логин
        user_login="chelyabinsk"
fi

echo "
Вы ввели следующие сведения:
Имя сервера:                    ${server_name}
IP сервера:                     ${server_IP}
IP шлюза:                       ${gateway_IP}"
if [ ${server_type} = 1 ]; then
echo "IP сервера backup:                ${backup_IP}"
fi
echo "Логин администратора филиала:     ${user_login}
Ваш доменный логин:             ${user_join_login}
OU филиала:                     ${filial_OU}
"
# input user answer - correct or not data?
echo "Если эти данные верны, введите YES, в противном случае, введите NO"
echo -n "Ваш ответ: "
read result_code
# verify answer
echo -n > ${tmp_dir}/rezult.code.user.input
case ${result_code} in
        [Yy][Ee][Ss])
        # согласен. продолжаем
        echo""
        echo "Вы ввели верные данные. Инсталляция продолжается.!"
        echo "1" > ${tmp_dir}/rezult.code.user.input
        ;;
        *)
        # передумал :)
        echo "Вы ответили '${result_code}'. Повторный ввод данных"
        echo "no" > ${tmp_dir}/rezult.code.user.input
        ;;
        esac

}       # end input function

while test 1 -eq 1
do
        # вводим данные.
        /usr/bin/touch ${tmp_dir}/rezult.code.user.input
        read rezult_code < ${tmp_dir}/rezult.code.user.input
        if [ ${rezult_code}x = 1x ]
        then
                # данные введены верные. считываем переменные.
                #echo "имя серванта ${server_name}"
                break
        else
                # либо данные не введены, либо они неверные
                input_function
        fi
done

# debug - skip restore
#if [ 2 -eq 1 ]; then

# detecting hdd on server
kernel_disks="`/sbin/sysctl kern.disks | awk -F ':' '{print $2}'`"
#kern.disks: da1 da0
if [ ${debug} -eq 1 ] ; then
echo "DEBUG: 1. kernel disks = ${kernel_disks}" ; fi
# cycle for all disks - count and match
i=0
for all_disks in ${kernel_disks}
do
        # detecting disk type
        disk_type="`echo ${all_disks} | /usr/bin/tr -d '[0-9]'`"
        # detecting disk number
        disk_number="`echo ${all_disks} | /usr/bin/tr -d '[a-z]'`"
        # find ATA|SATA disks
        if [ ${disk_type} = "ad" ]
        then
                # ATA/SATA disks
                echo " detected ATA/SATA disks! "
                echo "${all_disks}" > ${tmp_dir}/ata_disk.tmp
        else
                /usr/bin/touch ${tmp_dir}/ata_disk.tmp
        fi
        # SCSI device
        if [ ${all_disks} = "da1" ]
        then
                # found 1 SCSI disk (da0 - disk, da1 - flash)
                echo " detected SCSI disks! "
                echo "da0" > ${tmp_dir}/scsi_disk.tmp
        else
                /usr/bin/touch ${tmp_dir}/scsi_disk.tmp
        fi
        # detecting - how many SCSI disks on machine
#       for ii in 0 1 2 3 4 5 6 7 8 9
#       do
#               if [ ${all_disks} = da${ii} ]
#               then
#                       # count $i + 1 - line in file
##                      echo da${ii} >> ${tmp_dir}/disks_count.tmp
#               fi
#       done
        # up counter +1
        i="`/bin/expr $i + 1`"
done
#number_SCSI_disks="`cat ${tmp_dir}/disks_count.tmp | /usr/bin/wc -l | /usr/bin/tr -d ' '`"
#if [ ${debug} -eq 1 ] ; then
#echo "DEBUG: 2. number SCSI disks = ${number_SCSI_disks}" ; fi
# if $number_SCSI_disks = 1 - exit - only flash detected
#if [ ${number_SCSI_disks} -eq 1 ]
#then
        # exit
#       echo " Fatal: SCSI disks not detected!"
#       exit;
#fi
# scsi disks detected. da0 - disk for work

# disk counter. Current - number disk = 2; else - shutdown - error - no disks
# future - number disk = 3 (add RAM disk)
if [ $i -eq 2 ]
then
        # all OK
else
        # no disks?
        echo " HDD drive not found... System shutdown..."
        /bin/sleep 5 && /sbin/shutdown -p now && exit;
fi
# select disk for work
if [ `/usr/bin/wc -l ${tmp_dir}/ata_disk.tmp | awk '{print $1}'` -eq 1 ]
then
        # found ATA disk
        work_device="`/bin/cat ${tmp_dir}/ata_disk.tmp`"
else
        # ATA not found - work on SCSI
        work_device="`/bin/cat ${tmp_dir}/scsi_disk.tmp`"
fi

#exit
# fdisk
echo "Creating partitions..."
#/sbin/fdisk -f ${dist_dir}/fdisk.config -b -I -v /dev/da0 >/dev/null 2>&1
/sbin/fdisk -I -i -B /dev/${work_device}

echo "# /dev/${work_device}s1:
8 partitions:
#       size    offset  fstype  [fsize  bsize   bps/cpg]
a:      ${root_size}M   0       4.2BSD  2048    16384   32776
b:      ${swap_size}M   *       swap
c:      *       0       unused  0       0               # "raw" part, don't edit
d:      ${usr_size}M    *       4.2BSD  2048    16384   28528
e:      ${var_size}M    *       4.2BSD  2048    16384   28528
f:      *               *       4.2BSD  2048    16384   28552   # /shares - all remaining space
" > ${tmp_dir}/bsdlabel.txt

# bsdlabel
/sbin/bsdlabel -R ${work_device}s1 ${tmp_dir}/bsdlabel.txt >/dev/null 2>&1
/sbin/bsdlabel -B ${work_device}s1 >/dev/null 2>&1
# newfs
echo "Creating filesystems..."
/sbin/newfs /dev/${work_device}s1a      >/dev/null 2>&1 # /
/sbin/newfs /dev/${work_device}s1f      >/dev/null 2>&1 # /shares
/sbin/newfs /dev/${work_device}s1d      >/dev/null 2>&1 # /usr
/sbin/newfs /dev/${work_device}s1e      >/dev/null 2>&1 # /var
# tunefs
echo "Settings filesystems parameters..."
/sbin/tunefs -n enable /dev/${work_device}s1f   >/dev/null 2>&1 # softupdates
/sbin/tunefs -a enable /dev/${work_device}s1f   >/dev/null 2>&1 # ACLs
/sbin/tunefs -n enable /dev/${work_device}s1d   >/dev/null 2>&1 # softupdates
/sbin/tunefs -n enable /dev/${work_device}s1e   >/dev/null 2>&1 # softupdates

# restore /
echo "Restoring '/' filesystems..."
/sbin/mount /dev/${work_device}s1a /mnt
cd /mnt
/usr/bin/bunzip2 --stdout ${dist_dir}/root.dump.bz2 | /sbin/restore -rf -       >/dev/null 2>&1
# restore /usr
echo "Restoring '/usr' filesystems..."
/sbin/mount /dev/${work_device}s1d /mnt/usr
cd /mnt/usr
/usr/bin/bunzip2 --stdout ${dist_dir}/usr.dump.bz2 | /sbin/restore -rf -        >/dev/null 2>&1
# restore /var
echo "Restoring '/var' filesystems..."
/sbin/mount /dev/${work_device}s1e /mnt/var
cd /mnt/var
/usr/bin/bunzip2 --stdout ${dist_dir}/var.dump.bz2 | /sbin/restore -rf -        >/dev/null 2>&1
# restore /shares
echo "Restoring '/shares' filesystems..."
/sbin/mount /dev/${work_device}s1f /mnt/shares
cd /mnt/shares
/usr/bin/bunzip2 --stdout ${dist_dir}/shares.dump.bz2 | /sbin/restore -rf -     >/dev/null 2>&1

echo "All filesystems restored!"

# sync disks
sync
# end debug
#fi

# extract interface name (short; up)
for interface in `/sbin/ifconfig -l -u`
do
        # test interface name
        if [ ${interface} = "lo0" ]
        then
                # none
        else
                interface_name="${interface}"
        fi
done

# применяем введённые данные
# редактируем конфиги
echo "Applying new settings..."
for config in "etc/rc.conf" "etc/hosts" "usr/local/etc/exim/configure"
do
# server name
/usr/bin/sed -e "s/testsrv/${server_name}/g" /mnt/${config} \
        > ${tmp_dir}/tmp.config && /bin/mv ${tmp_dir}/tmp.config /mnt/${config}
# server IP
/usr/bin/sed -e "s/172.31.0.10/${server_IP}/g" /mnt/${config} \
        > ${tmp_dir}/tmp.config && /bin/mv ${tmp_dir}/tmp.config /mnt/${config}
# router IP $gateway_IP
/usr/bin/sed -e "s/172.31.0.1/${gateway_IP}/g" /mnt/${config} \
        > ${tmp_dir}/tmp.config && /bin/mv ${tmp_dir}/tmp.config /mnt/${config}
done
# smb.conf
server_name_UPPER="`echo ${server_name} | /usr/bin/tr '[:lower:]' '[:upper:]'`"
/usr/bin/sed -e "s/TESTSRV/${server_name_UPPER}/g" /mnt/usr/local/etc/smb.conf \
        > ${tmp_dir}/tmp.config && /bin/mv ${tmp_dir}/tmp.config /mnt/usr/local/etc/smb.conf
# Admin_testfil
/usr/bin/sed -e "s/admin_testfil/${user_login}/g" /mnt/usr/local/etc/smb.conf \
        > ${tmp_dir}/tmp.config && /bin/mv ${tmp_dir}/tmp.config /mnt/usr/local/etc/smb.conf
# filial OU (in AD)
/usr/bin/sed -e "s/testfil/${filial_OU}/g" /mnt/usr/local/etc/exim/includes/filials_macros.conf \
        > ${tmp_dir}/tmp.config && /bin/mv ${tmp_dir}/tmp.config /mnt/usr/local/etc/exim/includes/filials_macros.conf

# emai alias for admin
echo "" >> /mnt/etc/aliases
echo "#filial admin email" >> /mnt/etc/aliases
echo "${user_login}:    ${user_login}@my-domain-name.local" >> /mnt/etc/aliases
/usr/bin/sed -e "s/lissyara,dag/lissyara,dag,${user_login}/g" /mnt/etc/aliases \
        > ${tmp_dir}/tmp.config && /bin/mv ${tmp_dir}/tmp.config /mnt/etc/aliases

# settings for backup server
/usr/bin/sed -e "s/da0/${work_device}/g" /mnt/etc/fstab \
        > ${tmp_dir}/tmp.config && /bin/mv ${tmp_dir}/tmp.config /mnt/etc/fstab
if [ ${server_type} -eq 2 ]
then
        /usr/bin/sed -e "s/bce0/${interface_name}/g" /mnt/etc/rc.conf \
                > ${tmp_dir}/tmp.config && /bin/mv ${tmp_dir}/tmp.config /mnt/etc/rc.conf
        /usr/bin/sed -e "s/dovecot_enable=\"YES\"//g" /mnt/etc/rc.conf \
                > ${tmp_dir}/tmp.config && /bin/mv ${tmp_dir}/tmp.config /mnt/etc/rc.conf
        /usr/bin/sed -e "s/squid_enable=\"yes\"//g" /mnt/etc/rc.conf \
                > ${tmp_dir}/tmp.config && /bin/mv ${tmp_dir}/tmp.config /mnt/etc/rc.conf
        /bin/cp ${dist_dir}/exim.conf /mnt/usr/local/etc/exim/configure
        /usr/bin/sed -e "s/clamav_clamd_enable=\"YES\"//g" /mnt/etc/rc.conf \
                > ${tmp_dir}/tmp.config && /bin/mv ${tmp_dir}/tmp.config /mnt/etc/rc.conf
fi

sync

# debug - end skip restore
#fi

# new IP for jail
first_octet="`echo ${server_IP} | awk -F '.' '{print $1}'`"
second_octet="`echo ${server_IP} | awk -F '.' '{print $2}'`"
third_octet="`echo ${server_IP} | awk -F '.' '{print $3}'`"
fourth_octet="`echo ${server_IP} | awk -F '.' '{print $4}'`"
new_fourth_octet="`expr ${fourth_octet} - 1`"

alias_IP="${first_octet}.${second_octet}.${third_octet}.${new_fourth_octet}"

# alias - for jail
killall -9 dhclient >/dev/null 2>&1
sleep 1;
/sbin/ifconfig ${interface_name} inet ${server_IP} netmask 255.255.255.0
/sbin/ifconfig ${interface_name} alias ${alias_IP}
/sbin/route add default ${gateway_IP} >/dev/null 2>&1

# dev - for jail
/sbin/mount_devfs devfs /mnt/dev

# crating config for jail
#echo "# jails config
## Generic settings for JAILS
#jail_enable=\"YES\"
#jail_list=\"${server_name}\"
#jail_set_hostname_allow=\"YES\"
#jail_${server_name}_rootdir=\"/mnt\"
#jail_${server_name}_hostname=\"${server_name}\"
#jail_${server_name}_ip=\"${alias_IP}\"
#jail_${server_name}_procfs_enable=\"YES\"
#jail_${server_name}_devfs_enable=\"YES\"
#jail_${server_name}_flags=\"-l -U root\"

#" > /tmp/rc.conf.jail

# startting jails
#echo "starting jail for join in domain"
#/etc/rc.d/jail stop >/dev/null 2>&1
#/etc/rc.d/jail start >/dev/null 2>&1
#sleep 2;

# creating script for kinit
echo "#!/bin/sh
# killall services
#/usr/bin/killall -9 squid >/dev/null 2>&1
#/etc/rc.d/syslogd stop >/dev/null 2>&1
/bin/sleep 2
/usr/bin/kinit ${user_join_login}
" > /mnt/shares/tmp/kinit.sh
chmod 777 /mnt/shares/tmp/kinit.sh
# kerberos
echo "
Введите ВАШ доменный пароль для получения билета Kerberos:"
/usr/sbin/jail /mnt ${server_name} ${alias_IP} /shares/tmp/kinit.sh

# ifconfig down/up
#/sbin/ifconfig bce0 down
#sleep 1;
#ifconfig bce0 up
#sleep 1;

# creating script for net join
echo "#!/bin/sh
#/usr/local/etc/rc.d/samba restart >/dev/null 2>&1
sleep 1;
/usr/local/bin/net join -U ${user_join_login}
" > /mnt/shares/tmp/net_join.sh
chmod 777 /mnt/shares/tmp/net_join.sh
# join in domain
echo "
Введите ВАШ доменный пароль для ввода машины в домен:"
/usr/sbin/jail /mnt ${server_name} ${alias_IP} /shares/tmp/net_join.sh

# clear jail file
echo "# empty file" > /tmp/rc.conf.jail

echo "All done! Rebooting..."

# reboot
#/bin/sleep 5 && /sbin/shutdown -r now

exit;
Twitter Google Bookmarks Закладки Yandex БобрДобр.ru Memori.ru МоёМесто.ru

8 Марта

Доброе время суток!

Дорогие Дамы, женщины, мамы, девушки и девочки! Хочу поздравить Вас от всей души с Международным Женским Днем, с 8-ым марта!
Желаю Вам крепкого здоровья, без него никуда, счастья, чтобы улыбка была на ваших лицах, прекрасного настроения каждый день, любви и быть любимыми!

С Праздником

Постовой:Хотите похудеть? Испытайте на себе гречневую диету

Twitter Google Bookmarks Закладки Yandex БобрДобр.ru Memori.ru МоёМесто.ru

Свободные птицы

Серебрится весною роса

И в сирени звенит, как бубенчик.

Из гнезда высоко, в небеса

Смотрит с завистью маленький птенчик. Читать полностью…

Twitter Google Bookmarks Закладки Yandex БобрДобр.ru Memori.ru МоёМесто.ru

Белая песня

В белоснежной пурге и в заснеженной чаще

Опять утону.

Ярко-красная вишня покажется слаще

В зимнем плену. Читать полностью…

Twitter Google Bookmarks Закладки Yandex БобрДобр.ru Memori.ru МоёМесто.ru

Отражение

Отражение, ты лжешь, отражение:

Что за взгляд? – Пустой и унылый,

На губах бледный вздох, унижение, -

Это все мне за то, что любила? Читать полностью…

Twitter Google Bookmarks Закладки Yandex БобрДобр.ru Memori.ru МоёМесто.ru

Пыль…

Что бы мы ни делали, чего бы ни добивались, мы всегда ищем смысл. Вопросы «зачем?», «почему?», «для чего?» никогда не исчезают. Каждый шаг, каждое движение молекул должно для нас обрести этот самый СМЫСЛ! Но его нет! Все придумано, все притянуто… мы выдумываем его сами… МЫ выдумываем все. Вся наша жизнь, весь этот мир – это вымысел. Большой, глупый вымысел… одна огромная ПРИДУМКА без истока и завершения. И ничего мы не знаем, ничего не понимаем. Читать полностью…

Twitter Google Bookmarks Закладки Yandex БобрДобр.ru Memori.ru МоёМесто.ru

1 февраля

Уря!! Наступил последний месяц Зимы ;) Это очень-очень радует :) с чем я Вас всех поздравляю ;)

Но считается не из легких месяцев зимы, потому как в этот последний месяц, самые лютые морозы бывают и идет борьба между весной и зимой, бывает такое, что Весна долго не может войти в свои владения и тогда получаем продолжение зимы Читать полностью…

Twitter Google Bookmarks Закладки Yandex БобрДобр.ru Memori.ru МоёМесто.ru

Убаюкай…

Убаюкай ласково мне нервы,

Пусть не будет колики в висках,

И тогда, быть может, я из стервы

Стану ангелом, парящим в облаках. Читать полностью…

Twitter Google Bookmarks Закладки Yandex БобрДобр.ru Memori.ru МоёМесто.ru

Хмурое небо, не плачь!

Хмурое небо, не плачь!
Слезки свои не лей
Вдоль одиноких дач,
Вдоль опустевших аллей. Читать полностью…

Twitter Google Bookmarks Закладки Yandex БобрДобр.ru Memori.ru МоёМесто.ru

Зима…

Это просто зима,
Все от снега бело…
Виновата сама,
Что в душе тяжело.
Ничего, все пройдет,
Вот растают снега…
Снова тронется лед,
И зальет берега.
Я тихонько проснусь
И к тебе прикоснусь,
Ты обнимешь меня,
И развеется грусть.
И проснутся дома,
Отряхнутся от сна…
Я одна? Я одна…
Виновата зима…

Постовой: Е бэй, покупаем и продаем

Twitter Google Bookmarks Закладки Yandex БобрДобр.ru Memori.ru МоёМесто.ru