IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    RHEL7:Initial Setup(Redhat & Gnome)

    Adamhuan发表于 2016-03-09 10:43:32
    love 0

    (一)Red Hat Initial

    在第一次安装好RHEL7之后,启动时,你会首先被拉到一个叫做“Initial Setup”的画面里,如下所示:
    rhel7_first_boot_1
    字符界面的样子。

    rhel7_first_boot_2
    图形界面的样子。

    其目的就是让你接受下官方的许可,然后注册一个非root(特权用户)的普通账户。

    在有的时候,这个过程是有必要的;但另一些时候,我们却不希望它出现。
    那么,关于这个界面的详情以及如何禁用,就是本文的目标了。
    ————————————

    在我的环境中,RHEL7的服务器是在虚拟化环境里运行的。
    因此,在启动后,Initial Setup的程序启动后,通过SSH工具连入服务器,你就可以看到当前服务器画面后到底是什么程序在工作了:
    initial_setup_detail1
    如果,你是物理机跑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的程序的:
    gnome-initial-setup

    按照上文的方法,你可以找到具体的程序到底是什么:

    [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桌面环境的时候遭遇这个错误:
    gnome-initial-setup_error_1

    (正确的禁用方式)
    正确的禁用方式是通过修改配置文件:

    [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的登录窗体,你会看到这样的画面:
    RHEL7_Login_Screen_1
    没有普通用户可供显示。

    (三)最后
    对于希望跳开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。



沪ICP备19023445号-2号
友情链接