[Bug 1552621] [NEW] Can't login to desktop autometically after oem-config is finished on OEM mode

2016-03-07 Thread Launchpad Bug Tracker
You have been subscribed to a public bug:

Normally system should be able to switch to login screen after oem-
config is finished. However on OEM mode the system stops with black
screen after oem-config is finished.

This bug can be reproduced on Xenial daily image.

Steps:

1) Boot into OEM mode (EFI) and install the system
2) Restart system, click "Prepare for shipping to end user" and reboot system.
3) oem-config starts, enter user information
4) Black screen.

I found there has race condition between oem-config-* scripts.

First, please watch the code pieces I found in the oem-config-firstboot

for try in $(seq 1 $TRY); do
 CODE=0
 if [ "$FRONTEND" = debconf_ui ]; then
  plymouth quit || true
  LANG=en_US.UTF-8 FRONTEND="$FRONTEND" \
  /usr/sbin/oem-config-wrapper $DEBUG $AUTOMATIC --only \
   2>>/var/log/oem-config.log \
   || CODE=$?
 else
  FRONTEND="$FRONTEND" \
  /usr/bin/ubiquity-dm vt7 :0 oem \
   /usr/sbin/oem-config-wrapper $DEBUG $AUTOMATIC --only || CODE=$?
 fi
 if [ "$CODE" -eq 0 ]; then
  # Remove the temporary OEM configuration user, if possible
  # and desired.
  RET="$(echo GET oem-config/remove | debconf-communicate)"
  if [ "${RET#* }" = true ] && getent passwd oem >/dev/null; then
   pkill -u oem || true
   userdel --force --remove oem || true
  fi
  /bin/systemctl set-default graphical.target || true
  /bin/systemctl --no-block isolate graphical.target || true
  exit 0

and oem-config-wrapper:
#! /bin/sh
# Run oem-config, plus other things that need to run after it in X.
set -e

LANG=en_US.UTF-8 oem-config "$@"

# 'set -e' will cause us to exit if oem-config fails.  Otherwise:

# Don't run again.
rm -f /var/lib/oem-config/run

# Cleanup from anything the early command prepared
RET="$(echo GET oem-config/late_command | debconf-communicate)" || true
if [ "${RET%% *}" = 0 ]; then
 command="${RET#* }"
 log-output sh -c "$command" || true
fi
RET="$(echo GET oem-config/remove | debconf-communicate)"
if [ "${RET#* }" = true ]; then
 #debconf crashes with this set (LP: #641478)
 unset DBUS_SESSION_BUS_ADDRESS
 #mandb postinst doesn't like not knowing the locale
 if [ -r /etc/default/locale ]; then
  . /etc/default/locale
  export LANG LANGUAGE
 fi
 # We're about to pull the rug out from under our own feet, so this
 # has to run very late.
 case $FRONTEND in
  debconf_ui)
   export DEBIAN_FRONTEND=dialog
   oem-config-remove || true
   ;;
  gtk_ui)
   oem-config-remove-gtk || true
   ;;
  kde_ui)
   export DEBIAN_FRONTEND=kde
   oem-config-remove || true
   ;;
 esac
fi

The /usr/sbin/oem-config-wrapper calls oem-config for bring up UI for
user and runs oem-config-remove-gtk to remove all ubiquity packages at
the end.

Because of oem-config-remove-gtk removes all ubiquity packages, the oem-
config-firstboot can't run remaining commands. Therefore session can't
switch to graphical and results in black screen.

** Affects: oem-priority
 Importance: Undecided
 Status: New

** Affects: ubiquity (Ubuntu)
 Importance: Undecided
 Status: New

-- 
Can't login to desktop autometically after oem-config is finished on OEM mode
https://bugs.launchpad.net/bugs/1552621
You received this bug notification because you are a member of Ubuntu Bugs, 
which is subscribed to Ubuntu.

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

[Bug 1552621] [NEW] Can't login to desktop autometically after oem-config is finished on OEM mode

2016-03-03 Thread Franz Hsieh
Public bug reported:

Normally system should be able to switch to login screen after oem-
config is finished. However on OEM mode the system stops with black
screen after oem-config is finished.

This bug can be reproduced on Xenial daily image.

Steps:

1) Boot into OEM mode (EFI) and install the system
2) Restart system, click "Prepare for shipping to end user" and reboot system.
3) oem-config starts, enter user information
4) Black screen.

I found there has race condition between oem-config-* scripts.

First, please watch the code pieces I found in the oem-config-firstboot

for try in $(seq 1 $TRY); do
 CODE=0
 if [ "$FRONTEND" = debconf_ui ]; then
  plymouth quit || true
  LANG=en_US.UTF-8 FRONTEND="$FRONTEND" \
  /usr/sbin/oem-config-wrapper $DEBUG $AUTOMATIC --only \
   2>>/var/log/oem-config.log \
   || CODE=$?
 else
  FRONTEND="$FRONTEND" \
  /usr/bin/ubiquity-dm vt7 :0 oem \
   /usr/sbin/oem-config-wrapper $DEBUG $AUTOMATIC --only || CODE=$?
 fi
 if [ "$CODE" -eq 0 ]; then
  # Remove the temporary OEM configuration user, if possible
  # and desired.
  RET="$(echo GET oem-config/remove | debconf-communicate)"
  if [ "${RET#* }" = true ] && getent passwd oem >/dev/null; then
   pkill -u oem || true
   userdel --force --remove oem || true
  fi
  /bin/systemctl set-default graphical.target || true
  /bin/systemctl --no-block isolate graphical.target || true
  exit 0

and oem-config-wrapper:
#! /bin/sh
# Run oem-config, plus other things that need to run after it in X.
set -e

LANG=en_US.UTF-8 oem-config "$@"

# 'set -e' will cause us to exit if oem-config fails.  Otherwise:

# Don't run again.
rm -f /var/lib/oem-config/run

# Cleanup from anything the early command prepared
RET="$(echo GET oem-config/late_command | debconf-communicate)" || true
if [ "${RET%% *}" = 0 ]; then
 command="${RET#* }"
 log-output sh -c "$command" || true
fi
RET="$(echo GET oem-config/remove | debconf-communicate)"
if [ "${RET#* }" = true ]; then
 #debconf crashes with this set (LP: #641478)
 unset DBUS_SESSION_BUS_ADDRESS
 #mandb postinst doesn't like not knowing the locale
 if [ -r /etc/default/locale ]; then
  . /etc/default/locale
  export LANG LANGUAGE
 fi
 # We're about to pull the rug out from under our own feet, so this
 # has to run very late.
 case $FRONTEND in
  debconf_ui)
   export DEBIAN_FRONTEND=dialog
   oem-config-remove || true
   ;;
  gtk_ui)
   oem-config-remove-gtk || true
   ;;
  kde_ui)
   export DEBIAN_FRONTEND=kde
   oem-config-remove || true
   ;;
 esac
fi

The /usr/sbin/oem-config-wrapper calls oem-config for bring up UI for
user and runs oem-config-remove-gtk to remove all ubiquity packages at
the end.

Because of oem-config-remove-gtk removes all ubiquity packages, the oem-
config-firstboot can't run remaining commands. Therefore session can't
switch to graphical and results in black screen.

** Affects: ubiquity (Ubuntu)
 Importance: Undecided
 Status: New

** Description changed:

  Normally system should be able to switch to login screen after oem-
  config is finished. However on OEM mode the system stops with black
  screen after oem-config is finished.
  
  Steps:
  
  1) Boot into OEM mode (EFI) and install the system
  2) Restart system, click "Prepare for shipping to end user" and reboot system.
  3) oem-config starts, enter user information
- 4) Black screen. 
+ 4) Black screen.
  
  I found there has race condition between oem-config-* scripts.
  
  First, please watch the code pieces I found in the oem-config-firstboot
  
  for try in $(seq 1 $TRY); do
-   CODE=0
-   if [ "$FRONTEND" = debconf_ui ]; then
-   plymouth quit || true
-   LANG=en_US.UTF-8 FRONTEND="$FRONTEND" \
-   /usr/sbin/oem-config-wrapper $DEBUG $AUTOMATIC --only \
-   2>>/var/log/oem-config.log \
-   || CODE=$?
-   else
-   FRONTEND="$FRONTEND" \
-   /usr/bin/ubiquity-dm vt7 :0 oem \
-   /usr/sbin/oem-config-wrapper $DEBUG $AUTOMATIC --only 
|| CODE=$?
-   fi
-   if [ "$CODE" -eq 0 ]; then
-   # Remove the temporary OEM configuration user, if possible
-   # and desired.
-   RET="$(echo GET oem-config/remove | debconf-communicate)"
-   if [ "${RET#* }" = true ] && getent passwd oem >/dev/null; then
-   pkill -u oem || true
-   userdel --force --remove oem || true
-   fi
-   /bin/systemctl set-default graphical.target || true
-   /bin/systemctl --no-block isolate graphical.target || true
-   exit 0
+  CODE=0
+  if [ "$FRONTEND" = debconf_ui ]; then
+   plymouth quit || true
+   LANG=en_US.UTF-8 FRONTEND="$FRONTEND" \
+   /usr/sbin/oem-config-wrapper $DEBUG $AUTOMATIC --only \
+    2>>/var/log/oem-config.log \
+    || CODE=$?
+  else
+   FRONTEND="$FRONTEND" \
+   /usr/bin/ubiquity-dm vt7 :0 oem \
+    /usr/sbin/oem-config-wrapper $DEBUG