Переглянути джерело

自动分区,挂载到用户桌面,创建默认用户,拷贝帮助文档

杨振 4 роки тому
батько
коміт
1a9061ed3b

+ 17 - 0
debconf.sh

@@ -0,0 +1,17 @@
+#!/bin/bash
+
+#debconf-set passwd/user-fullname 'lnsjcy_ak01'
+#debconf-set passwd/username 'lnsjcy_ak01'
+#debconf-set passwd/user-password 'lnsjcy_ak01'
+#debconf-set passwd/user-password-again 'lnsjcy_ak01'
+#debconf-set passwd/user-uid '1000'
+#debconf-set passwd/auto-login 'true'
+#debconf-set netcfg/get_hostname 'lnsjcy'
+
+debconf-get passwd/user-fullname
+debconf-get passwd/username
+debconf-get passwd/user-password
+debconf-get passwd/user-password-again
+debconf-get passwd/user-uid
+debconf-get passwd/auto-login
+debconf-get netcfg/get_hostname

+ 27 - 0
debconf_test.py

@@ -0,0 +1,27 @@
+#!/usr/bin/python3
+
+import debconf
+import subprocess
+
+print("===")
+
+dccomm = subprocess.Popen(['debconf-communicate', '-fnoninteractive', 'ubiquity'],
+                          stdin=subprocess.PIPE,
+                          stdout=subprocess.PIPE, close_fds=True,
+                          universal_newlines=True)
+
+try:
+    dc = debconf.Debconf(read=dccomm.stdout, write=dccomm.stdin)
+    try:
+        dc.set('passwd/user-fullname', 'lnsjcy_ak01')
+        dc.set('passwd/username', 'lnsjcy_ak01')
+        dc.set('passwd/user-password', 'lnsjcy_ak01')
+        dc.set('passwd/user-password-again', 'lnsjcy_ak01')
+        dc.set('passwd/user-uid', '1000')
+        dc.set('passwd/auto-login', 'true')
+        dc.set('netcfg/get_hostname', 'lnsjcy')
+    except debconf.DebconfError:
+        pass
+finally:
+    dccomm.stdin.close()
+    dccomm.wait()

+ 8 - 0
ubiquity-frontend-gtk/usr/lib/ubiquity/ubiquity/frontend/gtk_ui.py

@@ -201,6 +201,8 @@ class Wizard(BaseFrontend):
                 label.set_selectable(True)
                 label.set_property('can-focus', False)
 
+        print("zhen---> %s distro=%s" % (__file__, distro), file=sys.stderr)
+
         BaseFrontend.__init__(self, distro)
         self.previous_excepthook = sys.excepthook
         sys.excepthook = self.excepthook
@@ -277,12 +279,15 @@ class Wizard(BaseFrontend):
         # load the main interface
         self.builder.add_from_file('%s/ubiquity.ui' % UIDIR)
 
+        print("zhen---> %s, UIDIR=%s" % (__file__, UIDIR), file=sys.stderr)
+
         self.builders = [self.builder]
         self.pages = []
         self.pagesindex = 0
         self.pageslen = 0
         steps = self.builder.get_object("steps")
         found_install = False
+
         for mod in self.modules:
             if hasattr(mod.module, 'PageGtk'):
                 mod.ui_class = mod.module.PageGtk
@@ -291,6 +296,9 @@ class Wizard(BaseFrontend):
                 mod.title = mod.ui.get('plugin_title')
                 widgets = mod.ui.get('plugin_widgets')
                 optional_widgets = mod.ui.get('plugin_optional_widgets')
+
+                print("zhen---> %s, mod.title=%s" % (__file__, mod.title), file=sys.stderr)
+
                 if not found_install:
                     found_install = mod.ui.get('plugin_is_install')
                 if widgets or optional_widgets:

+ 30 - 0
ubiquity/usr/lib/ubiquity/bin/ubiquity

@@ -236,6 +236,9 @@ def install(frontend=None, query=False):
     If frontend is None, defaults to the first of gtk_ui, kde_ui, and
     debconf_ui that exists.
     """
+
+    print("zhen---> frontend=%s, query=%s" % (frontend, query), file=sys.stderr)
+
     if frontend is None:
         frontends = ['gtk_ui', 'kde_ui', 'debconf_ui']
     else:
@@ -262,11 +265,14 @@ def install(frontend=None, query=False):
     unmount_target()
     distro = distribution().lower()
     wizard = ui.Wizard(distro)
+    print("zhen---> wizard 111", file=sys.stderr)
     if os.environ['UBIQUITY_FRONTEND'] == 'debconf_ui':
         open_terminal()
         start_debconf()
     ret = wizard.run()
+    print("zhen---> wizard 222", file=sys.stderr)
     wizard.stop_debconf()
+    print("zhen---> wizard 333", file=sys.stderr)
     if ret != 10 and 'UBIQUITY_GREETER' in os.environ:
         import traceback
         try:
@@ -512,6 +518,7 @@ def main(oem_config):
                            'is available.')
 
     (options, args) = parser.parse_args()
+    print("zhen---> ", options, args)
 
     if options.debug:
         os.environ['UBIQUITY_DEBUG'] = '1'
@@ -650,6 +657,29 @@ if __name__ == '__main__':
         open("/tmp/.kylin_oem_running", "w").write("1")
         ### kylin end
 
+    print("zhen---> %s, oem_config=%s" % (__file__, oem_config))
+    import debconf
+
+    dccomm = subprocess.Popen(['debconf-communicate', '-fnoninteractive', 'ubiquity'],
+                              stdin=subprocess.PIPE,
+                              stdout=subprocess.PIPE, close_fds=True,
+                              universal_newlines=True)
+    try:
+        dc = debconf.Debconf(read=dccomm.stdout, write=dccomm.stdin)
+        try:
+            dc.set('passwd/user-fullname', 'lnsjcy_ak01')
+            dc.set('passwd/username', 'lnsjcy_ak01')
+            dc.set('passwd/user-password', 'lnsjcy_ak01')
+            dc.set('passwd/user-password-again', 'lnsjcy_ak01')
+            dc.set('passwd/user-uid', '1000')
+            dc.set('passwd/auto-login', 'true')
+            dc.set('netcfg/get_hostname', 'lnsjcy')
+        except debconf.DebconfError:
+            pass
+    finally:
+        dccomm.stdin.close()
+        dccomm.wait()
+
     main(oem_config)
 
 # vim:ai:et:sts=4:tw=80:sw=4:

+ 9 - 0
ubiquity/usr/lib/ubiquity/plugins/ubi-usersetup.py

@@ -197,6 +197,8 @@ class PageGtk(PageBase):
         from gi.repository import Gio, Gtk
 
         PageBase.__init__(self, *args, **kwargs)
+        self.page = None
+        return
         ### kylin ghost install
         if os.path.isfile("/tmp/.kylin_ghost"):
             self.page = None
@@ -787,6 +789,13 @@ class PageNoninteractive(PageBase):
 
 class Page(plugin.Plugin):
     def prepare(self, unfiltered=False):
+        # add by zhen
+        # self.ui.set_hostname("hostname")
+        # self.ui.set_username("username")
+        # self.ui.set_auto_login(True)
+        # self.preseed('passwd/user-password', 'qwe123')
+        # self.preseed('passwd/user-password-again', 'qwe123')
+
         # edit by kobe
         self.tzdb = ubiquity.tz.Database()
 

+ 1 - 0
ubiquity/usr/lib/ubiquity/ubiquity/plugin_manager.py

@@ -44,6 +44,7 @@ def load_plugins():
                 if fnmatch.fnmatch(x, '*.py')]
     for modfile in modfiles:
         modname = os.path.splitext(modfile)[0]
+        print("zhen---> %s, modname=%s" % (__file__, modname), file=sys.stderr)
         try:
             modules.append(load_plugin(modname))
         except Exception as e:

+ 100 - 0
ubiquity/usr/lib/ubiquity/user-setup/user-setup-apply

@@ -419,4 +419,104 @@ else
 	db_set passwd/user-password-again ''
 fi
 
+echo "=================" >> /tmp/part.log
+HELP_FILE="银河麒麟桌面操作系统V10IP地址&输入法&系统升级配置手册.docx"
+
+function add_fstab() {
+  DATA_PARTION=$1
+  MOUNT_POINT=$2
+  if [ -b ${DATA_PARTION} ]; then
+    PARTION_UUID=$(blkid -s UUID -o value ${DATA_PARTION})
+    echo "DATA_PARTION=${DATA_PARTION}, UUID=${PARTION_UUID}"
+
+    if [ ! -d ${ROOT}${MOUNT_POINT} ]; then
+      echo mkdir -p ${ROOT}${MOUNT_POINT}
+      mkdir -p $ROOT/${MOUNT_POINT} || true
+
+      $chroot $ROOT chmod -R 777 ${MOUNT_POINT} >/dev/null || true
+      $chroot $ROOT chown $USER:$USER ${MOUNT_POINT} >/dev/null || true
+    fi
+
+    # 删除
+    sed -i "/$(basename ${DATA_PARTION})/d" $ROOT/etc/fstab
+    sed -i "/${PARTION_UUID}/d" $ROOT/etc/fstab
+
+    # 添加
+    echo "# ${DATA_PARTION}"
+    echo "UUID=${PARTION_UUID} ${MOUNT_POINT} ext4 rw 0 0"
+    echo "# ${DATA_PARTION}" >>$ROOT/etc/fstab
+    echo "UUID=${PARTION_UUID} ${MOUNT_POINT} ext4 rw 0 0" >>$ROOT/etc/fstab
+
+    if mountpoint -q ${ROOT}${MOUNT_POINT}; then
+      umount ${ROOT}${MOUNT_POINT}
+    fi
+
+    mount ${DATA_PARTION} ${ROOT}${MOUNT_POINT}
+    # rm -rf "${ROOT}${MOUNT_POINT}/lost+found"
+    mv "${ROOT}${MOUNT_POINT}/lost+found" "${ROOT}${MOUNT_POINT}/.lost+found"
+
+    if [[ ${MOUNT_POINT} =~ "/data1" ]]; then
+      if [ -f "/cdrom/docs/${HELP_FILE}" ]; then
+        echo cp -f "/cdrom/docs/${HELP_FILE}" "${ROOT}${MOUNT_POINT}/${HELP_FILE}" >> /tmp/part.log
+        cp -f "/cdrom/docs/${HELP_FILE}" "${ROOT}${MOUNT_POINT}/${HELP_FILE}"
+      else
+        echo "/cdrom/docs/${HELP_FILE} not exist" >> /tmp/part.log
+      fi
+      $chroot $ROOT chmod -R 777 ${MOUNT_POINT}
+    else
+      # 将帮助文档放到用户桌面
+      ln -sf "/data1/${HELP_FILE}" "${ROOT}${MOUNT_POINT}/${HELP_FILE}"
+      $chroot $ROOT chmod -R 755 ${MOUNT_POINT}
+    fi
+    $chroot $ROOT chown -R ${USER}:${USER} ${MOUNT_POINT}
+
+    umount ${ROOT}${MOUNT_POINT}
+  else
+    echo "${DATA_PARTION} not exist"
+  fi
+}
+
+## 获取数据盘(取大于 800G 的硬盘)
+DISKS=($(
+  LANG=en
+  fdisk -l | grep "Disk /dev" | awk -F '[ :]' '{ if($6 > 800*1024*1024*1024) print $2 }'
+))
+echo "DISKS=${DISKS[@]}" >> /tmp/part.log
+
+DATA_DISK=${DISKS[0]}
+echo "DATA_DISK=${DATA_DISK}" >> /tmp/part.log
+
+# 平均分为两个分区
+parted -s ${DATA_DISK} mktable gpt
+parted -s ${DATA_DISK} mkpart primary ext4 1 50%
+parted -s ${DATA_DISK} mkpart primary ext4 50% 100%
+partprobe ${DATA_DISK}
+sync
+
+if [[ "${DATA_DISK}" =~ "/dev/nvme" ]]; then
+  DATA_PARTION1=${DATA_DISK}p1
+  DATA_PARTION2=${DATA_DISK}p2
+elif [[ "${DATA_DISK}" =~ "/dev/sd" ]]; then
+  DATA_PARTION1=${DATA_DISK}1
+  DATA_PARTION2=${DATA_DISK}2
+fi
+
+## 格式化
+yes | mkfs -t ext4 -q -L data1 ${DATA_PARTION1} 2>/dev/null || true
+yes | mkfs -t ext4 -q -L data2 ${DATA_PARTION2} 2>/dev/null || true
+
+## 自动挂载
+echo add_fstab "${DATA_PARTION1}" "/data1" >> /tmp/part.log
+add_fstab "${DATA_PARTION1}" "/data1"
+
+## 区分中英文环境
+ky_lang="`cat /tmp/kylin_ubiquity_config | sed 's/ //g' | grep '^lang=' | sed 's/lang=//g'`"
+if [ "$ky_lang" = "zh" ] || [ "$ky_lang" = "zh_CN" ];then
+    USER_DESKTOP="/home/${USER}/桌面"
+else
+    USER_DESKTOP="/home/${USER}/Desktop"
+fi
+echo add_fstab "${DATA_PARTION2}" "${USER_DESKTOP}" >> /tmp/part.log
+add_fstab "${DATA_PARTION2}" "${USER_DESKTOP}"
+
 exit 0