Index: src/scripts/customize_rootfs.sh |
diff --git a/src/scripts/customize_rootfs.sh b/src/scripts/customize_rootfs.sh |
deleted file mode 100755 |
index e6946febcf0db671ee4e96013e30c45e54a5126c..0000000000000000000000000000000000000000 |
--- a/src/scripts/customize_rootfs.sh |
+++ /dev/null |
@@ -1,262 +0,0 @@ |
-#!/bin/bash |
- |
-# Copyright (c) 2009 The Chromium OS Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-# Script to customize the root file system after packages have been installed. |
-# |
-# NOTE: This script should be called by build_image.sh. Do not run this |
-# on your own unless you know what you are doing. |
- |
-# Load common constants. This should be the first executable line. |
-# The path to common.sh should be relative to your script's location. |
-. "$(dirname "$0")/common.sh" |
- |
-# Script must be run inside the chroot |
-assert_inside_chroot |
- |
-# Flags |
-DEFINE_string arch "x86" \ |
- "The target architecture to build for. One of { x86, arm }." |
-DEFINE_string root "" \ |
- "The root file system to customize." |
- |
-# Parse command line |
-FLAGS "$@" || exit 1 |
-eval set -- "${FLAGS_ARGV}" |
- |
-# Die on any errors. |
-set -e |
- |
-ROOT_FS_DIR="$FLAGS_root" |
-if [[ -z "$ROOT_FS_DIR" ]]; then |
- echo "Error: --root is required." |
- exit 1 |
-fi |
-if [[ ! -d "$ROOT_FS_DIR" ]]; then |
- echo "Error: Root FS does not exist? ($ROOT_FS_DIR)" |
- exit 1 |
-fi |
- |
-# Determine default user full username. |
-if [ ${CHROMEOS_OFFICIAL:-0} = 1 ]; then |
- FULLNAME="Google Chrome OS User" |
-else |
- FULLNAME="Chromium OS User" |
-fi |
- |
-# Determine what password to use for the default user. |
-CRYPTED_PASSWD_FILE="${SCRIPTS_DIR}/shared_user_passwd.txt" |
-if [ -f $CRYPTED_PASSWD_FILE ]; then |
- echo "Using password from $CRYPTED_PASSWD_FILE" |
- CRYPTED_PASSWD=$(cat $CRYPTED_PASSWD_FILE) |
-else |
- # Use a random password. unix_md5_crypt will generate a random salt. |
- echo "Using random password." |
- PASSWORD="$(base64 /dev/urandom | head -1)" |
- CRYPTED_PASSWD="$(echo "$PASSWORD" | openssl passwd -1 -stdin)" |
- PASSWORD="gone now" |
-fi |
- |
-# Set up a default user and add to sudo and the required groups. |
-ADD_USER="chronos" |
-ADD_GROUPS="audio video" |
-SHELL="/bin/sh" |
-if [[ -x "${ROOT_FS_DIR}/bin/bash" ]] ; then |
- SHELL="/bin/bash" |
-fi |
-echo "${ADD_USER}:x:1000:1000:${FULLNAME}:/home/${ADD_USER}/:${SHELL}" | \ |
- sudo dd of="${ROOT_FS_DIR}/etc/passwd" conv=notrunc oflag=append |
-echo "${ADD_USER}:${CRYPTED_PASSWD}:14500:0:99999::::" | \ |
- sudo dd of="${ROOT_FS_DIR}/etc/shadow" conv=notrunc oflag=append |
-echo "${ADD_USER}:x:1000:" | \ |
- sudo dd of="${ROOT_FS_DIR}/etc/group" conv=notrunc oflag=append |
-for i in $ADD_GROUPS; do |
- sudo sed -i "s/^\($i:x:[0-9]*:.*\)/\1,${ADD_USER}/g" \ |
- "${ROOT_FS_DIR}"/etc/group |
-done |
- |
-sudo mkdir -p "${ROOT_FS_DIR}/home/${ADD_USER}" |
-sudo chown 1000.1000 "${ROOT_FS_DIR}/home/${ADD_USER}" |
-cat <<EOF | sudo dd of="${ROOT_FS_DIR}/etc/sudoers" conv=notrunc oflag=append |
-%adm ALL=(ALL) ALL |
-$ADD_USER ALL=(ALL) ALL |
-EOF |
-sudo chmod 0440 "${ROOT_FS_DIR}/etc/sudoers" |
-echo "# Allow chronos user to renice processes so that chrome will adjust tab priorities" | \ |
- sudo dd of="${ROOT_FS_DIR}/etc/security/limits.conf" conv=notrunc oflag=append |
-echo "chronos hard nice 0" | \ |
- sudo dd of="${ROOT_FS_DIR}/etc/security/limits.conf" conv=notrunc oflag=append |
- |
-# Set CHROMEOS_VERSION_DESCRIPTION here (uses vars set in chromeos_version.sh) |
-# Was removed from chromeos_version.sh which can also be run outside of chroot |
-# where CHROMEOS_REVISION is set |
-# We have to set (in build_image.sh) and use REAL_USER due to many nested |
-# chroots which lose $USER state. |
-. "${SCRIPTS_DIR}/chromeos_version.sh" |
-if [ ${CHROMEOS_OFFICIAL:-0} = 1 ]; then |
- export CHROMEOS_VERSION_DESCRIPTION="${CHROMEOS_VERSION_STRING} (Official Build ${CHROMEOS_REVISION:?})" |
-elif [ "$REAL_USER" = "chrome-bot" ] |
-then |
- export CHROMEOS_VERSION_DESCRIPTION="${CHROMEOS_VERSION_STRING} (Continuous Build ${CHROMEOS_REVISION:?} - Builder: ${BUILDBOT_BUILD:-"N/A"})" |
-else |
- # Use the $USER passthru via $CHROMEOS_RELEASE_CODENAME |
- export CHROMEOS_VERSION_DESCRIPTION="${CHROMEOS_VERSION_STRING} (Developer Build ${CHROMEOS_REVISION:?} - $(date) - $CHROMEOS_RELEASE_CODENAME)" |
-fi |
- |
-# Set google-specific version numbers: |
-# CHROMEOS_RELEASE_CODENAME is the codename of the release. |
-# CHROMEOS_RELEASE_DESCRIPTION is the version displayed by Chrome; see |
-# chrome/browser/chromeos/chromeos_version_loader.cc. |
-# CHROMEOS_RELEASE_NAME is a human readable name for the build. |
-# CHROMEOS_RELEASE_TRACK and CHROMEOS_RELEASE_VERSION are used by the software |
-# update service. |
-# TODO(skrul): Remove GOOGLE_RELEASE once Chromium is updated to look at |
-# CHROMEOS_RELEASE_VERSION for UserAgent data. |
-cat <<EOF | sudo dd of="${ROOT_FS_DIR}/etc/lsb-release" |
-CHROMEOS_RELEASE_CODENAME=$CHROMEOS_VERSION_CODENAME |
-CHROMEOS_RELEASE_DESCRIPTION=$CHROMEOS_VERSION_DESCRIPTION |
-CHROMEOS_RELEASE_NAME=$CHROMEOS_VERSION_NAME |
-CHROMEOS_RELEASE_TRACK=$CHROMEOS_VERSION_TRACK |
-CHROMEOS_RELEASE_VERSION=$CHROMEOS_VERSION_STRING |
-GOOGLE_RELEASE=$CHROMEOS_VERSION_STRING |
-CHROMEOS_AUSERVER=$CHROMEOS_VERSION_AUSERVER |
-CHROMEOS_DEVSERVER=$CHROMEOS_VERSION_DEVSERVER |
-EOF |
- |
-# Turn user metrics logging on for official builds only. |
-if [ ${CHROMEOS_OFFICIAL:-0} -eq 1 ]; then |
- sudo touch "${ROOT_FS_DIR}/etc/send_metrics" |
-fi |
- |
-# Set timezone symlink |
-sudo rm -f "${ROOT_FS_DIR}/etc/localtime" |
-sudo ln -s /mnt/stateful_partition/etc/localtime "${ROOT_FS_DIR}/etc/localtime" |
- |
-# make a mountpoint for stateful partition |
-sudo mkdir -p "$ROOT_FS_DIR"/mnt/stateful_partition |
-sudo chmod 0755 "$ROOT_FS_DIR"/mnt |
-sudo chmod 0755 "$ROOT_FS_DIR"/mnt/stateful_partition |
- |
-# Copy everything from the rootfs_static_data directory to the corresponding |
-# place on the filesystem. Note that this step has to occur after we've |
-# installed all of the packages. |
-TMP_STATIC=$(mktemp -d) |
-sudo cp -r "${SRC_ROOT}/rootfs_static_data/common/." "$TMP_STATIC" |
-# TODO: Copy additional arch-platform-specific subdirectories. |
-sudo chmod -R a+rX "$TMP_STATIC/." |
-sudo cp -r "$TMP_STATIC/." "$ROOT_FS_DIR" |
-sudo rm -rf "$TMP_STATIC" |
- |
-# Fix issue where alsa-base (dependency of alsa-utils) is messing up our sound |
-# drivers. The stock modprobe settings worked fine. |
-# TODO: Revisit when we have decided on how sound will work on chromeos. |
-! sudo rm "${ROOT_FS_DIR}/etc/modprobe.d/alsa-base.conf" |
- |
-# Remove unneeded fonts. |
-sudo rm -rf "${ROOT_FS_DIR}/usr/share/fonts/X11" |
- |
-# The udev daemon takes a long time to start up and settle so we defer it until |
-# after X11 has been started. In order to be able to mount the root file system |
-# and start X we pre-populate some devices. These are copied into /dev by the |
-# chromeos_startup script. |
-# TODO: Hopefully some of this can be taken care of by devtmpfs. |
-DEVICES_DIR="${ROOT_FS_DIR}/lib/chromiumos/devices" |
-sudo mkdir -p "$DEVICES_DIR"/dri |
-sudo mkdir -p "$DEVICES_DIR"/input |
-sudo mkdir -p "$DEVICES_DIR"/pts |
-sudo mkdir -p "$DEVICES_DIR"/shm |
-sudo ln -sf /proc/self/fd "$DEVICES_DIR"/fd |
-sudo ln -sf /proc/self/fd/0 "$DEVICES_DIR"/stdin |
-sudo ln -sf /proc/self/fd/1 "$DEVICES_DIR"/stdout |
-sudo ln -sf /proc/self/fd/2 "$DEVICES_DIR"/stderr |
-sudo mknod --mode=0600 "$DEVICES_DIR"/initctl p |
-sudo mknod --mode=0640 "$DEVICES_DIR"/mem c 1 1 |
-sudo mknod --mode=0666 "$DEVICES_DIR"/null c 1 3 |
-sudo mknod --mode=0666 "$DEVICES_DIR"/zero c 1 5 |
-sudo mknod --mode=0666 "$DEVICES_DIR"/random c 1 8 |
-sudo mknod --mode=0666 "$DEVICES_DIR"/urandom c 1 9 |
-sudo mknod --mode=0660 "$DEVICES_DIR"/tty0 c 4 0 |
-sudo mknod --mode=0660 "$DEVICES_DIR"/tty1 c 4 1 |
-sudo mknod --mode=0660 "$DEVICES_DIR"/tty2 c 4 2 |
-sudo mknod --mode=0666 "$DEVICES_DIR"/tty c 5 0 |
-sudo mknod --mode=0660 "$DEVICES_DIR"/ttyMSM2 c 252 2 |
-sudo mknod --mode=0600 "$DEVICES_DIR"/console c 5 1 |
-sudo mknod --mode=0666 "$DEVICES_DIR"/ptmx c 5 2 |
-sudo mknod --mode=0666 "$DEVICES_DIR"/loop0 b 7 0 |
-sudo mknod --mode=0660 "$DEVICES_DIR"/sda b 8 0 |
-sudo mknod --mode=0660 "$DEVICES_DIR"/sda1 b 8 1 |
-sudo mknod --mode=0660 "$DEVICES_DIR"/sda2 b 8 2 |
-sudo mknod --mode=0660 "$DEVICES_DIR"/sda3 b 8 3 |
-sudo mknod --mode=0660 "$DEVICES_DIR"/sda4 b 8 4 |
-sudo mknod --mode=0660 "$DEVICES_DIR"/sdb b 8 16 |
-sudo mknod --mode=0660 "$DEVICES_DIR"/sdb1 b 8 17 |
-sudo mknod --mode=0660 "$DEVICES_DIR"/sdb2 b 8 18 |
-sudo mknod --mode=0660 "$DEVICES_DIR"/sdb3 b 8 19 |
-sudo mknod --mode=0660 "$DEVICES_DIR"/sdb4 b 8 20 |
-sudo mknod --mode=0640 "$DEVICES_DIR"/input/mouse0 c 13 32 |
-sudo mknod --mode=0640 "$DEVICES_DIR"/input/mice c 13 63 |
-sudo mknod --mode=0640 "$DEVICES_DIR"/input/event0 c 13 64 |
-sudo mknod --mode=0640 "$DEVICES_DIR"/input/event1 c 13 65 |
-sudo mknod --mode=0640 "$DEVICES_DIR"/input/event2 c 13 66 |
-sudo mknod --mode=0640 "$DEVICES_DIR"/input/event3 c 13 67 |
-sudo mknod --mode=0640 "$DEVICES_DIR"/input/event4 c 13 68 |
-sudo mknod --mode=0640 "$DEVICES_DIR"/input/event5 c 13 69 |
-sudo mknod --mode=0640 "$DEVICES_DIR"/input/event6 c 13 70 |
-sudo mknod --mode=0640 "$DEVICES_DIR"/input/event7 c 13 71 |
-sudo mknod --mode=0640 "$DEVICES_DIR"/input/event8 c 13 72 |
-sudo mknod --mode=0660 "$DEVICES_DIR"/fb0 c 29 0 |
-sudo mknod --mode=0660 "$DEVICES_DIR"/dri/card0 c 226 0 |
-sudo chown root.tty "$DEVICES_DIR"/tty* |
-sudo chown root.kmem "$DEVICES_DIR"/mem |
-sudo chown root.disk "$DEVICES_DIR"/sda* |
-sudo chown root.video "$DEVICES_DIR"/fb0 |
-sudo chown root.video "$DEVICES_DIR"/dri/card0 |
- |
-# Since we may mount read-only, our mtab should symlink to /proc |
-sudo ln -sf /proc/mounts "${ROOT_FS_DIR}/etc/mtab" |
- |
-# For the most part, we use our own set of Upstart jobs that were installed |
-# in /etc/init.chromeos so as not to mingle with jobs installed by various |
-# packages. We fix that up now. |
-sudo cp "${ROOT_FS_DIR}/etc/init/tty2.conf" "${ROOT_FS_DIR}/etc/init.chromeos" |
-sudo rm -rf "${ROOT_FS_DIR}/etc/init" |
-sudo mv "${ROOT_FS_DIR}/etc/init.chromeos" "${ROOT_FS_DIR}/etc/init" |
- |
-# By default, xkb writes computed configuration data to |
-# /var/lib/xkb. It can re-use this data to reduce startup |
-# time. In addition, if it fails to write we've observed |
-# keyboard issues. We add a symlink to allow these writes. |
-sudo rm -rf "${ROOT_FS_DIR}/var/lib/xkb" |
-sudo ln -s /var/cache "${ROOT_FS_DIR}/var/lib/xkb" |
- |
-# This is needed so that devicekit-disks has a place to |
-# put its sql lite database. Since we do not need to |
-# retain this information across boots, we are just |
-# putting it in /var/tmp |
-sudo rm -rf "${ROOT_FS_DIR}/var/lib/DeviceKit-disks" |
-sudo ln -s /var/tmp "${ROOT_FS_DIR}/var/lib/DeviceKit-disks" |
- |
-# dbus-uuidgen writes machine-id to /var/lib/dbus. |
-sudo rm -f "${ROOT_FS_DIR}/var/lib/dbus/machine-id" |
-sudo ln -s /var/cache/machine-id "${ROOT_FS_DIR}/var/lib/dbus/machine-id" |
- |
-# Remove pam-mount's default entry in common-auth and common-session |
-sudo sed -i 's/^\(.*pam_mount.so.*\)/#\1/g' "${ROOT_FS_DIR}"/etc/pam.d/common-* |
- |
-# A nice fake hostname to keep things happy. |
-echo "localhost" | sudo dd of="${ROOT_FS_DIR}/etc/hostname" |
- |
-# Clear the network settings. This must be done last, since it prevents |
-# any subsequent steps from accessing the network. |
-cat <<EOF | sudo dd of="${ROOT_FS_DIR}/etc/network/interfaces" |
-auto lo |
-iface lo inet loopback |
-EOF |
- |
-cat <<EOF | sudo dd of="${ROOT_FS_DIR}/etc/resolv.conf" |
-# Use the connman dns proxy. |
-nameserver 127.0.0.1 |
-EOF |
-sudo chmod a-wx "${ROOT_FS_DIR}/etc/resolv.conf" |