The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Полуавтоматическое разворачивание рабочих станций CentOS в домене MS Active Directory
В заметке рассказывается о решении задачи по автоматизации установки новых
Linux систем и организации управления ими с помощью Active Directory.

Исходные данные:

  • Домен AD Domain.ru.
  • Дистрибутив CentOS, легально скачанный с сайта CentOS.org (у руководства сейчас пунктик о 100% легальности софта).
  • Очень странный софт спец назначения - 64-битный софт с 32-битным установщиком. Процесс организации установки Linux по сети 1. Готовим сервер установки. 1.1 На сервере виртуалок создаём сервер загрузок из того же CentOS-a с отдельным VLAN-ом и IP адресом 172.17.17.254/24 - основная сетка целиком на MS, лучше её не тревожить... Пока. Сразу ставим туда демоны dhcpd, tftp, nfs, ntpd. Машины заливать будем по NFS - так привычнее. 1.2 Настраиваем на виртуальном сервере DHCP под сетевую загрузку Linux. Правим /etc/dhcp/dhcpd.conf до примерно такого вида: option domain-name "centos"; option domain-name-servers 172.17.17.254; default-lease-time 600; max-lease-time 7200; authoritative; log-facility local7; subnet 172.17.17.0 netmask 255.255.255.0 { range 172.17.17.100 172.17.17.199; option routers 172.17.17.254; filename "pxelinux.0"; next-server 172.17.17.254; } В общем - всё как обычно, кроме пары ключевых параметров: filename и next-server. next-server задаёт IP-адрес tftp-сервера, а filename - файл в папке загрузочных файлов (см следующий пункт). включаем загрузку демона chkconfig dhcpd on и запускаем его service dhcpd start 1.3 Настраиваем tftp Правим файл /etc/xinetd.d/tftp. Точнее в строке disabled ставим значение "no" и в строке server_args ставим те значения, что нам привычны, или оставляем исходные, но запоминаем, куда они указывают. Мне, развлекающемуся с юнихами года так с 1989, привычнее там видеть "-s -vv /tftpboot", что собственно там и оказалось, после моих правок. Создаём саму папку для загрузочных файлов (/tftpboot - из параметра server_args): mkdir /tftpboot Ставим пакет syslinux-а yum install syslinux-4.02-7.el6.x86_64 И копируем PXE-шный загрузчкик в выбранное место: cp /usr/share/syslinux/pxelinux.0 /tftpboot И включаем демон: chkconfig xinetd on service xinetd restart 1.4 Настраиваем NFS Создаём папку для дистрибутива mkdir -p /pub/CentOS Распаковываем туда дистрибутив mkdir -p /mnt/cdrom mount -o loop /путь-к-папке-с-изошником-CentOS/CentOS-6.3-x86_64-bin-DVD1.iso /mnt/cdrom cd /pub/CentOS cp -ra /mnt/cdrom/* . umount /mnt/cdrom mount -o loop /путь-к-папке-с-изошником-CentOS/CentOS-6.3-x86_64-bin-DVD2.iso /mnt/cdrom cp -ra /mnt/cdrom/* . umount /mnt/cdrom Открываем к доступ к папке echo '/pub *(ro,insecure,all_squash)' >> /etc/exports chkconfig nfs on service nfs restart С общей подготовкой сервера - всё. Приступаем к специфичной части. 2. CentOS-овский загрузчик. CentOS, разумеется, для загрузки с CD и DVD использует загрузчик isolinux проекта Syslinux. А значит сделать файл конфигурации загрузки для pxelinux.0, другой загрузчик этого же проекта - не просто, а очень просто. Создаём папку /tftpboot/pxelinux.cfg и папку для дополнительных файлов загрузчика. mkdir -p /tftpboot/pxelinux.cfg Копируем туда под именем default файл конфигурации isolinux-а с дистрибутива CentOS... cd /pub/CentOS/isolinux/ cp isolinux.cfg /tftpboot/pxelinux.cfg/default [[/CODE]] ...и несколько файлов, используемых при загрузке. cp boot.cat boot.msg grub.conf initrd.img splash.jpg TRANS.TBL vesamenu.c32 vmlinuz /tftpboot Добавляем ссылку на файл автоматической инсталяции в параметры ядра. В строки append initrd=initrd.img надо дописать ks=nfs:172.17.17.254:/pub/CentOS-conf/desktop.cfg, где nfs - протокол, по которому надо брать файл конфигурации, 172.17.17.254 - адрес сервера, /pub/CentOS-conf/desktop.cfg - полное имя файла. Получается файл /tftpboot/pxelinux.cfg/default примерно такого вида: default vesamenu.c32 #prompt 1 timeout 80 display boot.msg menu background splash.jpg menu title Welcome to CentOS 6.3! menu color border 0 #ffffffff #00000000 menu color sel 7 #ffffffff #ff000000 menu color title 0 #ffffffff #00000000 menu color tabmsg 0 #ffffffff #00000000 menu color unsel 0 #ffffffff #00000000 menu color hotsel 0 #ff000000 #ffffffff menu color hotkey 7 #ffffffff #ff000000 menu color scrollbar 0 #ffffffff #00000000 label linux menu label ^Install or upgrade an existing system menu default kernel vmlinuz append initrd=initrd.img ks=nfs:172.17.17.254:/pub/CentOS-conf/desktop.cfg label vesa menu label Install system with ^basic video driver kernel vmlinuz append initrd=initrd.img xdriver=vesa nomodeset ks=nfs:172.17.17.254:/pub/CentOS-conf/desktop.cfg label rescue menu label ^Rescue installed system kernel vmlinuz append initrd=initrd.img rescue label local menu label Boot from ^local drive localboot 0xffff label memtest86 menu label ^Memory test kernel memtest append - 3. Проблема совместимости 64-битной ОС с 32-битными приложениями. При наличии 32-битных библиотек у 64-битной ОС ни каких проблем совместимости нет. Но вот не задача: новый yum теперь 32-битные библиотеки ставить не будет. Дело всё в параметре multilib_policy - в 5-ом CentOSе он имел значение all, теперь - best. Как правильно побороть это на этапе установки - не знаю. В Интернете нашёл, как побороть это по-быстрому (http://lists.centos.org/pipermail/centos/2011-July/114513.html). Вытаскиваем из архива файл yuminstall.py во временную папку mkdir /tmp/1 cd /tmp/1 rpm2cpio /pub/CentOS/Packages/anaconda-13.21.176-1.el6.centos.x86_64.rpm | cpio -id ./usr/lib/anaconda/yuminstall.py Добавляем строку multilib_policy=all после строки [main], где-то 1252 строка файла. Можно применить такой патчик: cd usr/lib/anaconda/ cat <<EOP > patch --- yuminstall.py.orig 2012-12-25 13:49:06.979604951 +0400 +++ yuminstall.py 2012-12-25 13:51:15.433740741 +0400 @@ -1250,6 +1250,7 @@ buf = """ [main] +multilib_policy=all installroot=%s cachedir=/var/cache/yum keepcache=0 EOP patch < patch Кладём подправленный файл в папку, откуда его точно заглотит инсталлятор: mkdir /pub/CentOS/RHupdates/ cp yuminstall.py /pub/CentOS/RHupdates/ 4. Создание конфигурации Kickstart. Теперь надо создать конфигурационный файл инсталлятора. Сделать это проще всего в графическом конфигураторе system-config-kickstart yum install system-config-kickstart system-config-kickstart Запускается простой Х-овый интерфейс выбора параметров. Заполняем его по своему усмотрению, ключевыми являются закладки "Метод установки" и "Сценарий после установки". Т.к. я изначально решил устанавливать по NFS в методе установки указываем "Выполнить новую установку", "Установочный носитель" - NFS, "Сервер NFS" - 172.17.17.254 и "Каталог NFS" - /pub/CentOS. Содержимое закладки "Сценарий после установки" можно скопировать из примера конфигурационного файла, приведённого ниже, между полями %post и %end. Пакеты выбираем по собственному вкусу, но для интеграции с Active Directory необходимы samba-winbind krb5-workstation openldap-clients их можно выбрать в "Выбор пакетов" -> "Базовая система" -> "Клиент каталогов". На всякий случай, мало ли на какой каталог придётся переползать, я ставлю вообще все пакеты этого подраздела. Сохраняем файл конфигурации /pub/CentOS-conf/desktop.cfg - именно на него ссылаются параметры ks из п.2. У меня файл /pub/CentOS-conf/desktop.cfg получился таким (он содержит комментарии на русском, их лучше удалить перед использованием - не хватало ещё глюков из-за кириллицы): #platform=x86, AMD64, or Intel EM64T #version=DEVEL # Firewall configuration - Внутри локалки firewall по большей части мешает. firewall --disabled # Install OS instead of upgrade install # Use NFS installation media nfs --server=172.17.17.254 --dir=/pub/CentOS # Root password rootpw --iscrypted <зашифрованный пароль> # System authorization information auth --useshadow --passalgo=md5 --enablecache # Use text mode install text # Run the Setup Agent on first boot firstboot --disable # System keyboard keyboard ru # System language lang ru_RU # SELinux configuration selinux --disabled # Installation logging level logging --level=info ## Turnoff power after installation # Удобно при большом кол-ве одновременно заливаемых компов - готовые выключены, # и хорошо заметно, который можно уносить. Кикстарт не понимает всей прелести такого # и этот параметр приходится дописывать руками. poweroff # System timezone timezone Europe/Moscow # Network information network --bootproto=dhcp --device=eth0 --onboot=on # System bootloader configuration bootloader --location=mbr # Clear the Master Boot Record zerombr # Partition clearing information clearpart --all --initlabel # Disk partitioning information. # диски на компьютерах сейчас просто огромные, место жалеть не приходится part /boot --fstype="ext4" --size=1024 part swap --fstype="swap" --recommended part / --fstype="ext4" --size=131072 part /home --fstype="ext4" --grow --size=1 # # А вот тут - самое основное # Скрипт выполняется после всех основных действий по установки, в том числе # после заливки софта, но chroot-нутым в подготовленную машину. # %post # Скрипт создаётся в папке /tmp настраиваемого компьютера. Незачем ему там храниться. rm -f $0 # Говорим yum-у и впредь ставить 32-битные модули вместе с 64-битными. sed -i '/main/a multilib_policy=all' /etc/yum.conf # Делаем группу wheels истинно админской, чтобы даже пароль не спрашивала при sudo [ -d /etc/sudoers.d ] || mkdir /etc/sudoers.d echo '%root ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers.d/rootgrp chmod 0440 /etc/sudoers.d/rootgrp assureFileFolder() { local d=`dirname $1`; [ -d "$d" ] && return mkdir -p "$d" } # Конфигурация переключения раскладок клавиатуры в KDE kxkbrcFile=/etc/skel/.kde/share/config/kxkbrc assureFileFolder ${kxkbrcFile} cat <<EOKXKBRC > ${kxkbrcFile} [Layout] DisplayNames=us,ru LayoutList=us,ru LayoutLoopCount=-1 Model=pc101 Options=grp_led:scroll,grp:caps_toggle,grp:alt_shift_toggle,grp:shifts_toggle ResetOldOptions=true ShowFlag=true ShowLabel=true ShowLayoutIndicator=true ShowSingle=true SwitchMode=Window Use=true EOKXKBRC # Конфигурация локали KDE kdeglobFile=/etc/skel/.kde/share/config/kdeglobals assureFileFolder ${kdeglobFile} cat <<EOKGL > ${kdeglobFile} [Locale] Country=ru DateFormat=%A %d %B %Y Language=ru EOKGL # Конфигурация правописания KDE. kdespellCfg=/etc/skel/.kde/share/config/sonnetrc assureFileFolder ${kdespellCfg} cat <<EOKSPL > ${kdespellCfg} [Spelling] backgroundCheckerEnabled=true checkUppercase=true defaultClient= defaultLanguage=ru ignore_ru= skipRunTogether=true EOKSPL # Конфигурация переключения раскладок клавиатуры в GNOME. # Индикатор раскладок автоматически запускается только с GNOME 2.30, # а текущий гном в дистрибутиве Центоса - 2.28... # Так, что надо либо добавить сюда запуск индикатора, либо настраивать это руками... # Но оба этих упражнения - в другой раз. gnomekbdbase='/etc/skel/.gconf' gnomekbdfile='desktop/gnome/peripherals/keyboard/kbd/%gconf.xml' gkd=`dirname "${gnomekbdfile}"` mkdir -p "${gnomekbdbase}/${gkd}" d="${gkd}"; while [ "x${d}" != "x." ]; do touch ${gnomekbdbase}/$d/'%gconf.xml'; d=`dirname $d`; done sed 's/ /\\t/g' <<EOGCONFKBD > ${gnomekbdbase}/${gnomekbdfile} <?xml version="1.0"?> <gconf> <entry name="options" mtime="1357150396" type="list" ltype="string"> <!-- li type="string"> <stringvalue>terminate terminate:ctrl_alt_bksp</stringvalue> </li --> <li type="string"> <stringvalue>grp_led grp_led:scroll</stringvalue> </li> <li type="string"> <stringvalue>grp grp:caps_toggle</stringvalue> </li> <li type="string"> <stringvalue>grp grp:alt_shift_toggle</stringvalue> </li> <li type="string"> <stringvalue>grp grp:shifts_toggle</stringvalue> </li> </entry> </gconf> EOGCONFKBD chmod 0644 ${kxkbrcFile} ${kdeglobFile} ${kdespellCfg} ${gnomekbdbase}/${gnomekbdfile} # Создаём учётные записи для великих гуру - пусть имеют возможность зайти на любой компьютер # Creation of admins for u in guru0 guru1; do useradd -m -p '*' -g wheel -G root $u mkdir /home/$u/.ssh touch /home/$u/.ssh/authorized_keys chown -R $u:wheel /home/$u/.ssh chmod -R go-rwx /home/$u/.ssh done # А сюда вставляем их публичные ключи SSH. cat <<EOAK0 >> /home/guru0/.ssh/authorized_keys EOAK0 cat <<EOAK1 >> /home/guru1/.ssh/authorized_keys EOAK1 # # У меня установка будет в текстовом режиме, а при этом система получает 3 уровень запуска - исправляем на 5-й. sed -i 's/id:[3-5]:initdefault:/id:5:initdefault:/g' /etc/inittab # Монтируем раздел с дистрибутивом mkdir /tmp/pubDnld mount -o ro 172.17.17.254:/pub /tmp/pubDnld # Ставим дополнительные пакеты. rpm -ivh /tmp/pubDnld/Adobe/adobe-release-x86_64-1.0-1.noarch.rpm rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-adobe-linux rpm -i /tmp/pubDnld/Adobe/flash-plugin-11.2.202.258-release.x86_64.rpm # Удаляем ненужные мне глобальные серверы времени и включаем себя как резервный сервер. # Список серверов времени будем получать по DHCP. sed -i.instbak '/^server /s/^/#/;/server[[:space:]]*127/s/^#//;/fudge[[:space:]]*127/s/^#//' /etc/ntp.conf echo 'NTPSERVERARGS=iburst' >> /etc/sysconfig/network # !!! А вот ради этого всё и затевается - ставим скрипт присоединения к домену cp /tmp/pubDnld/CentOS-conf/adsjoin /etc/init.d/ chmod a+x /etc/init.d/adsjoin # Включаем нужные сервисы и выключаем не нужные. chkconfig kdump off chkconfig ntpd on chkconfig adsjoin on %end # Мой список устанавлеваемых пакетов. Создан system-config-kickstart-ом. # %packages @additional-devel @backup-client @base @basic-desktop @cifs-file-server @client-mgmt-tools @console-internet @core @debugging @desktop-debugging @desktop-platform @desktop-platform-devel @development @directory-client @directory-server @eclipse @fonts @general-desktop @graphical-admin-tools @graphics @hardware-monitoring @input-methods @internet-applications @internet-browser @java-platform @kde-desktop @large-systems @legacy-unix @mysql @mysql-client @network-file-system-client @nfs-file-server @office-suite @performance @perl-runtime @php @print-client @remote-desktop-clients @ruby-runtime @russian-support @scientific @server-platform-devel @system-admin-tools @technical-writing @x11 ImageMagick SDL-devel cachefilesd cmake crypto-utils dcraw desktop-file-utils docbook-utils-pdf dump evolution-exchange expect expect gcc-java glade3 glibc-utils gnome-common gnome-devel-docs gnutls-devel gtk2-devel-docs hesinfo hplip hplip-gui i2c-tools icedtea-web inkscape kdebase-devel kdebase-workspace-devel kdegraphics-devel kdelibs-apidocs kdelibs-devel kdemultimedia-devel kdenetwork-devel kdepim-devel kdepimlibs-devel kdesdk kdesdk-devel krb5-appl-clients krb5-pkinit-openssl krb5-workstation ldapjdk libXau-devel libXaw-devel libXinerama-devel libXmu-devel libXpm-devel libXrandr-devel libbonobo-devel libreoffice-base libreoffice-emailmerge libreoffice-headless libreoffice-javafilter libreoffice-ogltrans libreoffice-presentation-minimizer libreoffice-report-builder libreoffice-wiki-publisher libudev-devel libusb-devel libuuid-devel libxslt-devel lm_sensors mc memtest86+ net-snmp-devel netpbm-progs nscd nss-pam-ldapd openldap-clients pam_krb5 pam_ldap perl-Test-Pod perl-Test-Pod-Coverage perl-suidperl pexpect php-mysql planner qt-doc rpmdevtools rpmlint ruby-irb samba samba-winbind screen sox startup-notification-devel systemtap-grapher taskjuggler texinfo tftp thunderbird xchat xfig xmlto-tex xmltoman xorg-x11-proto-devel xrestop xz-devel %end 5. Скрипт интеграции в Active Directory. Собственно, это то, ради чего писалась вся статья. Скрипт достаточно прост, предназначен для использования теми, кто знает, что такое Active Directory и имеет соответствующее звание - Ад-мин. Проверки входных данных есть, но очень слабые. Скрипт выполняет ряд важных действий:
  • Выполняет синхронизацию времени компьютера с доменом. Адреса NTP сервера(-ов) берутся из DHCP. Если синхронизация по чему либо не срабатывает - скрипт запрашивает адрес NTP сервера.
  • Запрашивает имя компьютера и домена.
  • Прописывает эти значения в файлах конфигурации Самбы, Цербера и Лдапа.
  • Запрашивает имя админа и авторизуется им в Цербере.
  • Присоединяет комп к Active Directory.
  • Выполняет ряд дополнительных настроек компьютера. Скрипт /pub/CentOS-conf/adsjoin #!/bin/bash # c#hkconfig: 345 98 1 ### BEGIN INIT INFO # Provides: adsjoin # Default-Start: 3 4 5 # Default-Stop: 0 1 2 6 # Required-Start: # Should-Start: $network # Short-Description: Requests ADS data and joins domain # Description: Asks user to enter ADS domain name, admin account and password. # Configures system to use ADS and joins it. ### END INIT INFO # Source function library. . /etc/init.d/functions FILENAME=/etc/sysconfig/adsjoin [ -z "$HOME" ] && export HOME=/ usage() { echo $"Usage: $0 {start|stop}" } prepareConfig() { # Fix system hostname fhn="${HOSTNAME,,}.${DOMAINNAME_FULL,,}" sed -i.adsjoinbak '/^HOSTNAME=/s/=.*/='$fhn'/' /etc/sysconfig/network hostname ${fhn} # add this name to work echo 127.0.0.1 ${fhn} ${fhn/.*} >> /etc/hosts cat <<EOSMB >> /etc/samba/smb.conf [global] winbind refresh tickets = true kerberos method = secrets and keytab EOSMB cat <<EOPWB >> /etc/security/pam_winbind.conf krb5_auth = yes cached_login = yes krb5_ccache_type = FILE EOPWB # --winbindtemplateprimarygroup=users \\ basedn=$(echo ${DOMAINNAME_FULL,,} | sed 's/^\\.*/dc=/;s/\\.*$//;s/\\.\\.*/,dc=/g') authconfig --update \\ --enablelocauthorize --enablecache \\ --enablekrb5realmdns --enablekrb5kdcdns \\ --ldapserver=ldap://${DOMAINNAME_FULL,,}/ --ldapbasedn=${basedn} \\ --enablemkhomedir --winbindtemplatehomedir=/home/%U --winbindtemplateshell=/bin/bash \\ --enablewinbindusedefaultdomain --enablewinbindauth --enablewinbind --enablewinbindoffline \\ --smbsecurity=ads --smbrealm=${DOMAINNAME_FULL} --smbworkgroup=${DOMAINNAME_SHORT} --smbservers='*' cat <<EOKRB > /etc/krb5.conf [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = ${DOMAINNAME_FULL} dns_lookup_realm = true dns_lookup_kdc = true ticket_lifetime = 24h renew_lifetime = 7d forwardable = true [domain_realm] .${DOMAINNAME_FULL,,} = ${DOMAINNAME_FULL} ${DOMAINNAME_FULL,,} = ${DOMAINNAME_FULL} EOKRB } askHostDom() { local hn dn while :; do read -p 'Enter HOSTNAME without domain: ' hn [ 0 -eq "$?" -a 4 -le ${#hn} -a ${#hn} -le 15 -a -z "$(expr "$hn" : '[a-zA-Z0-9-]*\\(.*\\)')" ] && break; echo "Wrong value ${hn}" echo "You have to specify HOSTNAME 4 to 15 chars long." echo "Only numbers, latin letter and '-' are allowed." done while :; do read -p 'Enter DOMAINNAME: ' dn [ 0 -eq "$?" -a 6 -le ${#dn} -a -z "$(expr "$dn" : '[.a-zA-Z0-9-]*\\(.*\\)')" ] && break; echo "Wrong value ${dn}" echo "You have to specify DOMAINNAME at least 6 chars long." echo "Only latin letter, numbers, '.' and '-' are allowed." done HOSTNAME="$hn" DOMAINNAME_FULL="${dn^^}" DOMAINNAME_SHORT=${DOMAINNAME_FULL/.*} } askOrgDir() { local od echo 'Enter Organizational directory where to create computer'\\''s account. Defaut is "Computers".' echo 'Example: Site/Unit/Computers' read -p 'Org. dir.: ' od ORG_DIRECTORY="$od" } askAdmAccount() { local un while :; do read -p "Enter Admin account of scpecified domain: " un [ 0 -eq "$?" -a 1 -lt ${#un} ] && break; echo "Wrong value ${un}" echo "You have to specify admin account at least 1 char long." done ADMINACCOUNT="$un" } case "$1" in start) if [ `/usr/bin/id -u` -ne 0 ]; then echo $"ERROR: Only root can run $0" exit 4 fi if [ ! -f /usr/bin/net ]; then echo $"ERROR: samba is not installed" exit 5 fi args="" if [ -f $FILENAME ] && [ ! -z "$(grep 'RUN_ADSJOIN=NO' $FILENAME)" ]; then exit 0 fi . /etc/profile.d/lang.sh /usr/bin/plymouth --hide-splash echo echo '========================================================' echo '============ Joining ADS' echo '========================================================' echo NTPSRVSRC='DHCP' NTPSRVS=$(sed -n 's/^server[[:space:]]*\\([^[:space:]]*\\).*/\\1/p' /etc/ntp.conf| grep -v '^127' | sort -u) while :; do if [ -n "$NTPSRVS" ] ; then if ntpdate -u -b $NTPSRVS then echo "Ok" break; else echo "Can not synchronize to $NTPSRVS" fi fi echo -e "WARNING!!!\\nNO working time servers specified by ${NTPSRVSRC}!" read -p 'Enter NTP server(s) of domain: ' NTPSRVS NTPSRVSRC=user done askHostDom echo prepareConfig echo service rsyslog restart /sbin/chkconfig winbind on RETVAL=255 HOME=/root LOGNAME=root USER=root export HOME LOGNAME USER cntr=3 while [ 0 -lt "$cntr" ]; do askAdmAccount if /usr/bin/kinit "${ADMINACCOUNT}"; then RETVAL=0; break; fi RETVAL=$? echo "Error loging in domain ${DOMAINNAME_FULL}" cntr=$(( $cntr - 1 )) done if [ "$RETVAL" -eq 0 ]; then cntr=3 while [ 0 -lt "$cntr" ]; do askOrgDir if [ -n "${ORG_DIRECTORY}" ]; then ADS_ORG="createcomputer='${ORG_DIRECTORY}'" else ADS_ORG="" fi ( eval "set -x; /usr/bin/net ads join -d 1 -k ${ADS_ORG}" ) 2>&1 | tee /tmp/net-ads-join-$$-$cntr # /usr/bin/net ads join -d 2 -k RETVAL=$? if [ "$RETVAL" -ne 0 ]; then echo "WARNING!!! Join failed" read -p 'Press Enter' else { /usr/bin/net -d 1 ads keytab create /sbin/service winbind restart /usr/bin/net -d 1 ads dns register } > /tmp/adsjoin-$$ 2>&1 break; fi cntr=$(( $cntr - 1 )) done fi /usr/bin/plymouth --show-splash # If adsjoin succeeded, chkconfig it off so we don't see the message # every time about starting up adsjoin. if [ "$RETVAL" -eq 0 ]; then action "" /bin/true else action "" /bin/false fi /sbin/chkconfig adsjoin off exit $RETVAL ;; stop) exit 0 ;; status) /sbin/chkconfig --list adsjoin | grep on >/dev/null RETVAL=$? if [ "$RETVAL" -eq 0 ]; then if [ ! -f $FILENAME ] || [ -z "$(grep 'RUN_ADSJOIN=NO' $FILENAME)" ]; then echo $"adsjoin is scheduled to run" else echo $"adsjoin is not scheduled to run" fi else echo $"adsjoin is not scheduled to run" fi exit 0 ;; restart | reload | force-reload | condrestart | try-restart) usage exit 3 ;; *) usage exit 2 ;; esac Примечание: Параметры "kerberos method" файла /etc/samba/smb.conf и "krb5_ccache_type" файла /etc/security/pam_winbind.conf должны соответствовать друг другу, иначе пользователь не сможет войти в систему. Как ни странно, синхронизация времени часто сбивается в первые секунды после получения адреса по dhcp - приходится вводить адреса серверов времени по нескольку раз. Скрипт перезапускает самбу и при его корректном завершении компьютер готов для работы без перезагрузки. 6. Запускаем компьютеры Подключаем к установочному VLAN-у коммутатор. Запасаемся веером патч-кордов, кабелей питания и пр. Подключаем сразу несколько компьютеров. Запускаем на каждом новом компьютере загрузку по сети, по протоколу PXE. У моих компьютеров сетевая загрузка была отключена, приходилось к каждому подключать монитор и клавиатуру и немного донастраивать BIOS. Но в итоге, параллельная подготовка компьютеров, включившая распаковку, заливку, введение в домен и упаковку для отправки в дальний офис занимала менее часа на десяток компьютеров, при том, что отдельный компьютер подготавливается около 15 минут. Что не добавлено 1. Если какие-либо системные утилиты, работающие под уч. записью root и понимающие, что такое Цербер, лезут к компьютерам домена, можно добавить в крон ежечасный вызов /usr/bin/net ads kerberos kinit -P - инициализация Церберного билета уч. записи компьютера. 2. Можно добавить клиенту DHCP скрипт само-регистрации в DNS: /etc/dhcp/dhclient.d/dnsreg.sh #!/bin/sh dnsreg_config() { if [ -x /usr/bin/net ] ; then /usr/bin/net ads dns register -P 2>&1 | logger -p daemon.info -t dhclient fi true } 3. Не настроен сервер обновлений. У нас CentOS ставился для пробы перед покупкой RedHat-а, обновлять его как-то не планировалось. Благодарности
  • Руководству - за поставленную задачу и время, выделенное на её решение.
  • VMWare - за незначительное количество "особенностей" в эмуляторе, в целом просто невероятным образом сократившего время отладки.
  • Microsoft - за незабываемое время проведённое в борьбе с Active Directory.
  • Wireshark.org - за отличный инструмент борьбы со всем этим счастьем.
  •  
    05.01.2013 , Автор: Дмитрий Казаров
    Ключи: centos, samba, ldap, activedirectory, kickstart, install, pxe, boot / Лицензия: CC-BY
    Раздел:    Корень / Администратору / Система / Linux специфика / Установка и работа с пакетами программ в Linux

    Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Аноним12 (?), 02:52, 05/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Неужто стали внедрять Linux в таких масштабах на рабочих станциях
     
  • 1.2, mike_t (?), 10:06, 05/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Добавляем строку multilib_policy=all
    э.. а так не работает чтоль?
    %packages --multilib
     
     
  • 2.21, kazarov (ok), 19:49, 13/01/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Добавляем строку multilib_policy=all
    > э.. а так не работает чтоль?
    > %packages --multilib

    Да, слона то я и не приметил.

     
  • 2.33, kazarov (ok), 07:20, 19/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Проверил.
    Ругается (перепечатывал ручками, возможны очепятки):
    The following problem occured on line 179 of the kickstart file:

    no such option: --multilib

    install exited abnormally [1/1]
    The system will be rebooted when you press Ctrl-C or Ctrl-Alt-Delete.

    Да и в коде анаконды такого слова не нашёл.

    Скорее всего это ещё не доехало в центос из федоры.

     

  • 1.3, mike_t (?), 10:06, 05/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    # Создаём учётные записи для великих гуру - пусть имеют возможность зайти на любой компьютер

    http://fedoraproject.org/wiki/Anaconda/Kickstart#user ?

     
     
  • 2.19, kazarov (ok), 19:38, 13/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Kickstart создаёт юзеров с персональной группой в качестве основной. Это часто мешает работе нескольких гуру.
     

  • 1.4, mike_t (?), 10:07, 05/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    # Включаем нужные сервисы и выключаем не нужные.
    http://fedoraproject.org/wiki/Anaconda/Kickstart#services
     
  • 1.5, mike_t (?), 10:07, 05/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    # Ставим дополнительные пакеты.
    а здесь лучше создать и вести свой репозиторий yum
     
  • 1.6, Андрей Покало (?), 20:09, 06/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    очередной велосипед, В дистрибутиве CentOS есть system-config-netboot, проснись и пой! :-)
     
     
  • 2.8, mike_t (?), 08:27, 08/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    я так и не смог добиться от нетбут того что мне надо :(
     
     
  • 3.9, Андрей Покало (?), 11:04, 08/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > я так и не смог добиться от нетбут того что мне надо
    > :(

    у меня уже лет семь работают бездисковые терминальные клиенты на работе при помощи нетбут, до этого использовал связку чуть по сложнее LTSP

     

  • 1.7, Nicolas (??), 07:27, 08/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Спасибо за статью, грамотно разложено по полочкам, с множеством деталей, чего часто не хватает сейчас.
     
  • 1.10, name (??), 02:10, 09/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    файл vesamenu.c32 лучше копировать оттуда, где берется pxelinux.0
    если они окажутся от разных версий syslinux, то может не заработать загрузка меню.
    в 3.хх версии однажды наткнулся на такую граблю
     
  • 1.11, Евгений (??), 08:46, 09/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Проще поставить станцию настроить ровно 1 раз, а далее одним скриптом подключать к домену. PXE только для LTSP, и для тех кто привык все ставить через инсталятор. На Linux проще все ставить
    gzip -cd образ | dd of=/dev/sda
     
     
  • 2.13, Андрей Покало (?), 09:40, 09/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Проще поставить станцию настроить ровно 1 раз, а далее одним скриптом подключать
    > к домену. PXE только для LTSP, и для тех кто привык
    > все ставить через инсталятор. На Linux проще все ставить
    > gzip -cd образ | dd of=/dev/sda

    а если /dev/sda нету на машине? т.е. загрузка оси происходит не с жесткого диска, а с сервера в сети. Хотя речь в статье идет об инсталляции оси на рабочую станцию, всего лишь...

     
  • 2.15, mike_t (?), 10:53, 09/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    по времени примерно столько же, но менее удобно и в дальнейшем более косячно ибо сейчас линукс очень любит привязываться к id железа и генерировать uuid на каждый чих
     
  • 2.20, kazarov (ok), 19:44, 13/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Несколько возражений:

    1. В домен вводить всё равно придётся.
    2. Машины могут быть с разными дисками, не делать же имидж для каждой.
    3. Что-то делать ручками??? Ну уж нет! Кабели воткнул, включил - пусть сами работают.

     
     
  • 3.23, user (??), 17:53, 15/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    # 2. Машины могут быть с разными дисками, не делать же имидж для каждой.
    man sfdisk
     
     
  • 4.25, гыук (?), 19:01, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Да, да. А ещё
    man resize2fs

    И обязательно
    info grub
    ведь grub может захотеть перестановки, если биос диски немного не так репортит.

    И ради чего весь этот геморрой? Установка нормальным способом - 15 минут в автомате, полная заливка диска - 85 минут для Hitachi HDS721050CLA360.

     

  • 1.12, sems (??), 09:35, 09/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А почему такой странный выбор адреса подсети?
     
     
  • 2.14, mike_t (?), 10:51, 09/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    обычный приватный
     
     
  • 3.17, sems (??), 12:36, 10/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Да. сорри это я что то ступил
     

  • 1.18, dd (??), 18:37, 11/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А про 100 % лицензионности. Это зря. Документы где?
    Для отдела к нужны документы.
     
     
  • 2.22, цирроз (?), 15:48, 14/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    больше сказать нечего было?
    любой адекватный админ знает, где можно легально приобрести дистрибутив с квитанцией о покупке. так что пускай "отдел к" ловит вантузятников
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру