(一)Red Hat Initial
在第一次安装好RHEL7之后,启动时,你会首先被拉到一个叫做“Initial Setup”的画面里,如下所示:
字符界面的样子。
图形界面的样子。
其目的就是让你接受下官方的许可,然后注册一个非root(特权用户)的普通账户。
在有的时候,这个过程是有必要的;但另一些时候,我们却不希望它出现。
那么,关于这个界面的详情以及如何禁用,就是本文的目标了。
————————————
在我的环境中,RHEL7的服务器是在虚拟化环境里运行的。
因此,在启动后,Initial Setup的程序启动后,通过SSH工具连入服务器,你就可以看到当前服务器画面后到底是什么程序在工作了:
如果,你是物理机跑RHEL7,你可以通过直连或者网络连入目标机,通过一样的方法,得到上面截图所示的答案。
命令行:
[root@rhel7 ~]# ps -ef | grep --color initial root 1087 1 0 16:08 tty1 00:00:00 /bin/sh /bin/initial-setup root 1099 1087 0 16:08 tty1 00:00:01 python -m initial_setup root 11759 11537 0 16:33 pts/1 00:00:00 grep --color=auto --color initial [root@rhel7 ~]#
关于上面进程的详情:
[root@rhel7 ~]# cd /proc/1087/ [root@rhel7 1087]# ll total 0 dr-xr-xr-x 2 root root 0 Mar 9 17:01 attr -rw-r--r-- 1 root root 0 Mar 9 17:01 autogroup -r-------- 1 root root 0 Mar 9 17:01 auxv -r--r--r-- 1 root root 0 Mar 9 17:01 cgroup --w------- 1 root root 0 Mar 9 17:01 clear_refs -r--r--r-- 1 root root 0 Mar 9 17:01 cmdline -rw-r--r-- 1 root root 0 Mar 9 17:01 comm -rw-r--r-- 1 root root 0 Mar 9 17:01 coredump_filter -r--r--r-- 1 root root 0 Mar 9 17:01 cpuset lrwxrwxrwx 1 root root 0 Mar 9 17:01 cwd -> / -r-------- 1 root root 0 Mar 9 17:01 environ lrwxrwxrwx 1 root root 0 Mar 9 17:01 exe -> /usr/bin/bash dr-x------ 2 root root 0 Mar 9 17:01 fd dr-x------ 2 root root 0 Mar 9 17:01 fdinfo -rw-r--r-- 1 root root 0 Mar 9 17:01 gid_map -r-------- 1 root root 0 Mar 9 17:01 io -r--r--r-- 1 root root 0 Mar 9 17:01 limits -rw-r--r-- 1 root root 0 Mar 9 17:01 loginuid dr-x------ 2 root root 0 Mar 9 17:01 map_files -r--r--r-- 1 root root 0 Mar 9 17:01 maps -rw------- 1 root root 0 Mar 9 17:01 mem -r--r--r-- 1 root root 0 Mar 9 17:01 mountinfo -r--r--r-- 1 root root 0 Mar 9 17:01 mounts -r-------- 1 root root 0 Mar 9 17:01 mountstats dr-xr-xr-x 6 root root 0 Mar 9 17:01 net dr-x--x--x 2 root root 0 Mar 9 17:01 ns -r--r--r-- 1 root root 0 Mar 9 17:01 numa_maps -rw-r--r-- 1 root root 0 Mar 9 17:01 oom_adj -r--r--r-- 1 root root 0 Mar 9 17:01 oom_score -rw-r--r-- 1 root root 0 Mar 9 17:01 oom_score_adj -r--r--r-- 1 root root 0 Mar 9 17:01 pagemap -r--r--r-- 1 root root 0 Mar 9 17:01 personality -rw-r--r-- 1 root root 0 Mar 9 17:01 projid_map lrwxrwxrwx 1 root root 0 Mar 9 17:01 root -> / -rw-r--r-- 1 root root 0 Mar 9 17:01 sched -r--r--r-- 1 root root 0 Mar 9 17:01 sessionid -rw-r--r-- 1 root root 0 Mar 9 17:01 setgroups -r--r--r-- 1 root root 0 Mar 9 17:01 smaps -r--r--r-- 1 root root 0 Mar 9 17:01 stack -r--r--r-- 1 root root 0 Mar 9 17:01 stat -r--r--r-- 1 root root 0 Mar 9 17:01 statm -r--r--r-- 1 root root 0 Mar 9 17:01 status -r--r--r-- 1 root root 0 Mar 9 17:01 syscall dr-xr-xr-x 3 root root 0 Mar 9 16:46 task -r--r--r-- 1 root root 0 Mar 9 17:01 timers -rw-r--r-- 1 root root 0 Mar 9 17:01 uid_map -r--r--r-- 1 root root 0 Mar 9 17:01 wchan [root@rhel7 1087]# [root@rhel7 1087]# cat cgroup 10:blkio:/ 9:memory:/ 8:net_cls:/ 7:cpuset:/ 6:perf_event:/ 5:devices:/ 4:hugetlb:/ 3:freezer:/ 2:cpuacct,cpu:/ 1:name=systemd:/system.slice/initial-setup-text.service [root@rhel7 1087]#
可以看到该进程的第一个调用来自于:“1:name=systemd:/system.slice/initial-setup-text.service”。
事实上,该程序是通过系统启动服务调用的:
[root@rhel7 1087]# systemctl list-units --type=service | grep --color initial-setup initial-setup-text.service loaded activating start start Initial Setup configuration program (text mode) [root@rhel7 1087]#
该服务的详情:
[root@rhel7 1087]# systemctl status initial-setup-text ● initial-setup-text.service - Initial Setup configuration program (text mode) Loaded: loaded (/usr/lib/systemd/system/initial-setup-text.service; enabled; vendor preset: disabled) Active: activating (start) since Wed 2016-03-09 23:54:30 CST; 6h left Process: 1084 ExecStartPre=/bin/kill -55 1 (code=exited, status=0/SUCCESS) Process: 1024 ExecStartPre=/bin/plymouth quit (code=exited, status=0/SUCCESS) Main PID: 1087 (initial-setup) CGroup: /system.slice/initial-setup-text.service ├─1087 /bin/sh /bin/initial-setup └─1099 python -m initial_setup Mar 09 16:08:37 rhel7 anaconda[1099]: console fonts found for locale en_US.UTF-8: ['latarcyrheb-sun16'] Mar 09 16:08:37 rhel7 anaconda[1099]: setting console font to latarcyrheb-sun16 Mar 09 16:08:37 rhel7 program[1099]: Running... setfont latarcyrheb-sun16 Mar 09 16:08:37 rhel7 program[1099]: Return code: 0 Mar 09 16:08:37 rhel7 anaconda[1099]: console font set successfully to latarcyrheb-sun16 Mar 09 16:08:37 rhel7 anaconda[1099]: setting locale to: en_US.UTF-8 Mar 09 16:08:38 rhel7 initial-setup[1099]: initializing TUI Mar 09 16:08:38 rhel7 initial-setup[1099]: setting up the UI Mar 09 16:08:38 rhel7 initial-setup[1099]: starting the UI Mar 09 16:08:38 rhel7 anaconda[1099]: Running Thread: AnaInputThread1 (140048991631104) [root@rhel7 1087]#
除了“initial-setup-text”,还有一个“initial-setup-graphical”:
[root@rhel7 ~]# cd /usr/lib/systemd/system [root@rhel7 system]# ls -ltr | grep --color initial-setup -rw-r--r--. 1 root root 866 Aug 27 2015 initial-setup-text.service -rw-r--r--. 1 root root 510 Aug 27 2015 initial-setup-graphical.service [root@rhel7 system]# [root@rhel7 system]# systemctl status initial-setup-graphical ● initial-setup-graphical.service - Initial Setup configuration program Loaded: loaded (/usr/lib/systemd/system/initial-setup-graphical.service; enabled; vendor preset: disabled) Active: inactive (dead) Mar 09 23:54:16 rhel7 systemd[1]: [/usr/lib/systemd/system/initial-setup-graphical.service:14] Support for option SysVStartPriority= has been remov...is ignored Hint: Some lines were ellipsized, use -l to show in full. [root@rhel7 system]#
————————
禁用方法:
基于上面的论述,要想禁用就很简单了。
一、
假如当前,你不想执行Initial Setup,你可以把它的进程杀掉:
[root@rhel7 system]# ps -ef | grep initial root 1087 1 0 16:08 tty1 00:00:00 /bin/sh /bin/initial-setup root 1099 1087 0 16:08 tty1 00:00:01 python -m initial_setup root 12796 11928 0 17:26 pts/2 00:00:00 grep --color=auto initial [root@rhel7 system]# kill -9 1087 [root@rhel7 system]#
这样,你就跳过过程了。
二、
如果,你当前主机没有执行Initial Setup,但是下次启动,又不想看到它们,你可以这样:
1. systemctl disable initial-setup-text
2. systemctl disable initial-setup-graphical
Shell:
[root@rhel7 ~]# systemctl disable initial-setup-text Removed symlink /etc/systemd/system/multi-user.target.wants/initial-setup-text.service. [root@rhel7 system]# [root@rhel7 ~]# systemctl disable initial-setup-graphical.service Removed symlink /etc/systemd/system/graphical.target.wants/initial-setup-graphical.service. [root@rhel7 ~]#
————————
折腾了这么久,最后,让我们看看上面的两个文件到底写了些什么:
文件:/usr/lib/systemd/system/initial-setup-text.service
[root@rhel7 ~]# cat /usr/lib/systemd/system/initial-setup-text.service [Unit] Description=Initial Setup configuration program (text mode) After=livesys.service plymouth-quit-wait.service After=systemd-vconsole-setup.service Before=display-manager.service getty@tty1.service getty@ttyUSB0.service Before=serial-getty@ttyS0.service serial-getty@ttyO0.service serial-getty@ttyO2.service Before=serial-getty@ttyAMA0.service serial-getty@ttymxc0.service serial-getty@ttymxc3.service serial-getty@hvc0.service Conflicts=plymouth-quit-wait.service Conflicts=initial-setup-graphical.service After=initial-setup-graphical.service ConditionKernelCommandLine=!rd.live.image [Service] Type=oneshot ExecStartPre=-/bin/plymouth quit ExecStartPre=/bin/kill -55 1 ExecStart=/bin/initial-setup ExecStartPost=/bin/kill -54 1 TimeoutSec=0 RemainAfterExit=yes SysVStartPriority=99 StandardInput=tty StandardOutput=tty [Install] WantedBy=multi-user.target [root@rhel7 ~]#
文件:/usr/lib/systemd/system/initial-setup-graphical.service
[root@rhel7 ~]# cat /usr/lib/systemd/system/initial-setup-graphical.service [Unit] Description=Initial Setup configuration program After=livesys.service plymouth-quit-wait.service Before=display-manager.service getty@tty1.service Conflicts=plymouth-quit-wait.service initial-setup-text.service ConditionKernelCommandLine=!rd.live.image [Service] Type=oneshot ExecStartPre=-/bin/plymouth quit ExecStart=/bin/xinit /bin/firstboot-windowmanager /bin/initial-setup -- /bin/Xorg :9 -ac -nolisten tcp TimeoutSec=0 RemainAfterExit=no SysVStartPriority=99 [Install] WantedBy=graphical.target [root@rhel7 ~]#
(二)Gnome Initial Setup
通常,我们都会安装Gnome的桌面环境。
而Gnome的环境,也是有Initial的程序的:
按照上文的方法,你可以找到具体的程序到底是什么:
[root@rhel7 ~]# ps -ef | grep --color initial gnome-i+ 4663 4242 0 18:12 ? 00:00:00 /usr/bin/gnome-session --autostart /usr/share/gdm/greeter/autostart --session gnome-initial-setup gnome-i+ 4703 1 0 18:12 ? 00:00:00 /usr/bin/dbus-launch --exit-with-session /usr/bin/gnome-session --autostart /usr/share/gdm/greeter/autostart --session gnome-initial-setup gnome-i+ 5805 4663 1 18:12 ? 00:00:02 gnome-shell --mode=initial-setup gnome-i+ 6605 4663 1 18:12 ? 00:00:02 /usr/libexec/gnome-initial-setup root 11630 11532 0 18:16 pts/0 00:00:00 grep --color=auto --color initial [root@rhel7 ~]#
如上所示,是一个叫:gnome-initial-setup的程序。
她到底在哪里呢?
[root@rhel7 ~]# ls -ltr /usr/share/gdm/greeter/autostart/ total 16 -rw-r--r--. 1 root root 177 Jun 9 2015 spice-vdagent.desktop -rw-r--r--. 1 root root 254 Aug 19 2015 orca-autostart.desktop -rw-r--r--. 1 root root 186 Aug 19 2015 caribou-autostart.desktop -rw-r--r-- 1 root root 2791 Mar 9 18:03 gnome-initial-setup.desktop [root@rhel7 ~]# [root@rhel7 ~]# file /usr/share/gdm/greeter/autostart/gnome-initial-setup.desktop /usr/share/gdm/greeter/autostart/gnome-initial-setup.desktop: UTF-8 Unicode text [root@rhel7 ~]#
可以看到,这其实是个文本文件。
来看看它的内容吧:
[root@rhel7 ~]# cat /usr/share/gdm/greeter/autostart/gnome-initial-setup.desktop [Desktop Entry] Name=Initial Setup Name[af]=Aanvanklike opstelling Name[an]=Configuración inicial Name[ar]=الإعداد الأولي Name[as]=আৰম্ভণিৰ সংস্থাপন Name[be]=Пачатковая настройка Name[bg]=Първоначални настройки Name[bn_IN]=প্রাথমিক সেটআপ Name[bs]=Početna postavka Name[ca]=Configuració inicial Name[ca@valencia]=Configuració inicial Name[cs]=Prvotní nastavení Name[da]=Førstegangsopsætning Name[de]=Ersteinrichtung Name[el]=Αρχική εγκατάσταση Name[en_GB]=Initial Setup Name[eo]=Unua agordo Name[es]=Configuración inicial Name[et]=Esialgne seadistus Name[eu]=Hasierako konfigurazioa Name[fa]=برپاسازی ابتدایی Name[fi]=Alkuasetukset Name[fr]=Configuration initiale Name[fur]=Impostazions Iniziai Name[ga]=Socrú Tosaigh Name[gl]=Configuración inicial Name[gu]=પ્રારંભિક સુયોજન Name[he]=התקנה ראשונית Name[hi]=आरंभिक सेटअप Name[hu]=Kiinduló beállítások Name[ia]=Configuration initial Name[id]=Penyiapan Awal Name[is]=Upphafsstillingar Name[it]=Impostazioni iniziali Name[ja]=初期セットアップ Name[kk]=Бастапқы баптау Name[kn]=ಆರಂಭಿಕ ಏರ್ಪಾಡು Name[ko]=초기 설정 Name[lt]=Pradinis nustatymas Name[lv]=Sākotnējā iestatīšana Name[ml]=ആദ്യ ക്രമീകരണം Name[mr]=प्रारंभिक सेटअप Name[nb]=Førstegangsoppsett Name[ne]=सुरुको सेटअप Name[nl]=Instellingen voor eerste gebruik Name[oc]=Configuration initiale Name[or]=ପ୍ରାରମ୍ଭିକ ବ୍ୟବସ୍ଥା Name[pa]=ਮੁੱਢਲਾ ਸੈਟਅੱਪ Name[pl]=Początkowe ustawienia Name[pt]=Configuração Inicial Name[pt_BR]=Definições iniciais Name[ru]=Первоначальная настройка Name[sk]=Prvotné nastavenie Name[sl]=Začetna nastavitev Name[sr]=Почетно подешавање Name[sr@latin]=Početno podešavanje Name[sv]=Initial konfiguration Name[ta]=தொடக்க அமைவு Name[te]=ఆరంభ అమరిక Name[tg]=Барпосозии ибтидоӣ Name[th]=ตั้งค่าเริ่มแรก Name[tr]=İlk Kurulum Name[ug]=دەسلەپكى تەڭشەش Name[uk]=Перший запуск Name[vi]=Cài đặt lần đầu Name[zh_CN]=初始配置 Name[zh_HK]=初始設定 Name[zh_TW]=初始設定 Icon=preferences-system Exec=/usr/libexec/gnome-initial-setup Terminal=false Type=Application StartupNotify=false Categories=GNOME;GTK;System; OnlyShowIn=GNOME; NoDisplay=true X-GNOME-Bugzilla-Bugzilla=GNOME X-GNOME-Bugzilla-Product=gnome-initial-setup X-GNOME-Bugzilla-Component=general X-GNOME-Bugzilla-Version=unknown [root@rhel7 ~]#
(错误的禁用方式)
可能有人会说,既然找到了启动时执行的文件,那么把它删掉或者移走不就好了嘛?
事实上,这么做不能够起到禁用Gnome的Initial执行的效果,反而会引起异常。
假如你只是让系统找不到这个文件,而达到禁用开机启动,那么你会在系统启动Gnome桌面环境的时候遭遇这个错误:
(正确的禁用方式)
正确的禁用方式是通过修改配置文件:
[root@rhel7 ~]# cat /etc/gdm/custom.conf # GDM configuration storage [daemon] InitialSetupEnable=True [security] [xdmcp] [greeter] [chooser] [debug] [root@rhel7 ~]#
在你的环境中,可能该文件中的记录是空的。
故而,默认,Initial是启动的策略(InitialSetupEnable=True)。
除非你在上述文件的“[daemon]”区域中添加:InitialSetupEnable=False
即,修改为:
[root@rhel7 ~]# vi /etc/gdm/custom.conf [root@rhel7 ~]# [root@rhel7 ~]# cat /etc/gdm/custom.conf # GDM configuration storage [daemon] InitialSetupEnable=False [security] [xdmcp] [greeter] [chooser] [debug] [root@rhel7 ~]#
这样,Gnome的Initial程序就被跳过了。
只不过,如果你安装的时候没有创建非root用户,又没有走initial的过程(该过程中创建普通用户,但被我们跳过)。
则,在RHEL的登录窗体,你会看到这样的画面:
没有普通用户可供显示。
(三)最后
对于希望跳开Redhat和Gnome的Kickstart脚本来说,你可以这么写:
1. 禁用红帽:firstboot –disable
2. 禁用Gnome:写入“%post”安装后脚本中
具体如下:
[root@cobbler-server kickstarts]# cat ks_rhel7.ks #version=DEVEL # Use CDROM installation media #cdrom url --url=http://192.168.232.142/cobbler/ks_mirror/RHEL7-2-x86_64 reboot # System authorization information auth --enableshadow --passalgo=sha512 repo --name="Server-HighAvailability" --baseurl=file:///run/install/repo/addons/HighAvailability repo --name="Server-ResilientStorage" --baseurl=file:///run/install/repo/addons/ResilientStorage # Use graphical install graphical # Run the Setup Agent on first boot firstboot --disable ignoredisk --only-use=sda # Keyboard layouts keyboard --vckeymap=us --xlayouts='us' # System language lang en_US.UTF-8 --addsupport=zh_CN.UTF-8 # Network information #network --bootproto=static --device=eth0 --gateway=192.168.232.2 --ip=192.168.78.131 --nameserver=114.114.114.114 --netmask=255.255.255.0 --ipv6=auto --activate network --onboot yes --bootproto=dhcp --device=eth0 --gateway=192.168.232.2 --nameserver=114.114.114.114 --ipv6=auto --activate network --hostname=rhel7 # Root password rootpw --iscrypted $6$lEixIcmAnF6X4YKy$H9gO9hQH76soukGIpd4.qGbhHpoaZGIkZY7icx9CbXvDbpGpe/oPiLC9eJuf0yp9AADWN.VvKCL1ZgEPs99Ml/ selinux --disabled # System services services --disabled="chronyd" # System timezone timezone Asia/Shanghai --isUtc --nontp # X Window System configuration information xconfig --startxonboot # MBR zerombr # System bootloader configuration #bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda autopart --type=lvm # Partition clearing information clearpart --all --initlabel --drives=sda %packages @^graphical-server-environment @base @core @desktop-debugging @dial-up @fonts @gnome-desktop @guest-agents @guest-desktop-agents @input-methods @internet-browser @multimedia @print-client @x11 kexec-tools %end %addon com_redhat_kdump --enable --reserve-mb='auto' %end %post --interpreter=/bin/bash ( # disable service systemctl disable firewalld.service # disable Gnome initial setup sed -i '/daemon/aInitialSetupEnable=False' /etc/gdm/custom.conf # Yum config cat < /etc/yum.repos.d/rhel7.repo [ISO] name=ISO baseurl=http://192.168.232.142/cobbler/ks_mirror/RHEL7-2-x86_64/ gpgcheck=0 [HighAvailability] name=HighAvailability baseurl=http://192.168.232.142/cobbler/ks_mirror/RHEL7-2-x86_64/addons/HighAvailability/ gpgcheck=0 [ResilientStorage] name=ResilientStorage baseurl=http://192.168.232.142/cobbler/ks_mirror/RHEL7-2-x86_64/addons/ResilientStorage/ gpgcheck=0 EOF ) > /root/kickstart_post.log %end [root@cobbler-server kickstarts]#
(四)参考的资料:
红帽官方网站(RHN)上对于Initial Setup的描述:
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Installation_Guide/chap-initial-setup.html
————————————————————
Done。