Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(509)

Side by Side Diff: src/scripts/customize_rootfs.sh

Issue 651083: Get rid of some scripts that are no longer used (Closed)
Patch Set: Created 10 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/scripts/build_platform_packages.sh ('k') | src/scripts/dpkg_no_scripts.sh » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/bin/bash
2
3 # Copyright (c) 2009 The Chromium OS Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file.
6
7 # Script to customize the root file system after packages have been installed.
8 #
9 # NOTE: This script should be called by build_image.sh. Do not run this
10 # on your own unless you know what you are doing.
11
12 # Load common constants. This should be the first executable line.
13 # The path to common.sh should be relative to your script's location.
14 . "$(dirname "$0")/common.sh"
15
16 # Script must be run inside the chroot
17 assert_inside_chroot
18
19 # Flags
20 DEFINE_string arch "x86" \
21 "The target architecture to build for. One of { x86, arm }."
22 DEFINE_string root "" \
23 "The root file system to customize."
24
25 # Parse command line
26 FLAGS "$@" || exit 1
27 eval set -- "${FLAGS_ARGV}"
28
29 # Die on any errors.
30 set -e
31
32 ROOT_FS_DIR="$FLAGS_root"
33 if [[ -z "$ROOT_FS_DIR" ]]; then
34 echo "Error: --root is required."
35 exit 1
36 fi
37 if [[ ! -d "$ROOT_FS_DIR" ]]; then
38 echo "Error: Root FS does not exist? ($ROOT_FS_DIR)"
39 exit 1
40 fi
41
42 # Determine default user full username.
43 if [ ${CHROMEOS_OFFICIAL:-0} = 1 ]; then
44 FULLNAME="Google Chrome OS User"
45 else
46 FULLNAME="Chromium OS User"
47 fi
48
49 # Determine what password to use for the default user.
50 CRYPTED_PASSWD_FILE="${SCRIPTS_DIR}/shared_user_passwd.txt"
51 if [ -f $CRYPTED_PASSWD_FILE ]; then
52 echo "Using password from $CRYPTED_PASSWD_FILE"
53 CRYPTED_PASSWD=$(cat $CRYPTED_PASSWD_FILE)
54 else
55 # Use a random password. unix_md5_crypt will generate a random salt.
56 echo "Using random password."
57 PASSWORD="$(base64 /dev/urandom | head -1)"
58 CRYPTED_PASSWD="$(echo "$PASSWORD" | openssl passwd -1 -stdin)"
59 PASSWORD="gone now"
60 fi
61
62 # Set up a default user and add to sudo and the required groups.
63 ADD_USER="chronos"
64 ADD_GROUPS="audio video"
65 SHELL="/bin/sh"
66 if [[ -x "${ROOT_FS_DIR}/bin/bash" ]] ; then
67 SHELL="/bin/bash"
68 fi
69 echo "${ADD_USER}:x:1000:1000:${FULLNAME}:/home/${ADD_USER}/:${SHELL}" | \
70 sudo dd of="${ROOT_FS_DIR}/etc/passwd" conv=notrunc oflag=append
71 echo "${ADD_USER}:${CRYPTED_PASSWD}:14500:0:99999::::" | \
72 sudo dd of="${ROOT_FS_DIR}/etc/shadow" conv=notrunc oflag=append
73 echo "${ADD_USER}:x:1000:" | \
74 sudo dd of="${ROOT_FS_DIR}/etc/group" conv=notrunc oflag=append
75 for i in $ADD_GROUPS; do
76 sudo sed -i "s/^\($i:x:[0-9]*:.*\)/\1,${ADD_USER}/g" \
77 "${ROOT_FS_DIR}"/etc/group
78 done
79
80 sudo mkdir -p "${ROOT_FS_DIR}/home/${ADD_USER}"
81 sudo chown 1000.1000 "${ROOT_FS_DIR}/home/${ADD_USER}"
82 cat <<EOF | sudo dd of="${ROOT_FS_DIR}/etc/sudoers" conv=notrunc oflag=append
83 %adm ALL=(ALL) ALL
84 $ADD_USER ALL=(ALL) ALL
85 EOF
86 sudo chmod 0440 "${ROOT_FS_DIR}/etc/sudoers"
87 echo "# Allow chronos user to renice processes so that chrome will adjust tab pr iorities" | \
88 sudo dd of="${ROOT_FS_DIR}/etc/security/limits.conf" conv=notrunc oflag=append
89 echo "chronos hard nice 0" | \
90 sudo dd of="${ROOT_FS_DIR}/etc/security/limits.conf" conv=notrunc oflag=append
91
92 # Set CHROMEOS_VERSION_DESCRIPTION here (uses vars set in chromeos_version.sh)
93 # Was removed from chromeos_version.sh which can also be run outside of chroot
94 # where CHROMEOS_REVISION is set
95 # We have to set (in build_image.sh) and use REAL_USER due to many nested
96 # chroots which lose $USER state.
97 . "${SCRIPTS_DIR}/chromeos_version.sh"
98 if [ ${CHROMEOS_OFFICIAL:-0} = 1 ]; then
99 export CHROMEOS_VERSION_DESCRIPTION="${CHROMEOS_VERSION_STRING} (Official Buil d ${CHROMEOS_REVISION:?})"
100 elif [ "$REAL_USER" = "chrome-bot" ]
101 then
102 export CHROMEOS_VERSION_DESCRIPTION="${CHROMEOS_VERSION_STRING} (Continuous Bu ild ${CHROMEOS_REVISION:?} - Builder: ${BUILDBOT_BUILD:-"N/A"})"
103 else
104 # Use the $USER passthru via $CHROMEOS_RELEASE_CODENAME
105 export CHROMEOS_VERSION_DESCRIPTION="${CHROMEOS_VERSION_STRING} (Developer Bui ld ${CHROMEOS_REVISION:?} - $(date) - $CHROMEOS_RELEASE_CODENAME)"
106 fi
107
108 # Set google-specific version numbers:
109 # CHROMEOS_RELEASE_CODENAME is the codename of the release.
110 # CHROMEOS_RELEASE_DESCRIPTION is the version displayed by Chrome; see
111 # chrome/browser/chromeos/chromeos_version_loader.cc.
112 # CHROMEOS_RELEASE_NAME is a human readable name for the build.
113 # CHROMEOS_RELEASE_TRACK and CHROMEOS_RELEASE_VERSION are used by the software
114 # update service.
115 # TODO(skrul): Remove GOOGLE_RELEASE once Chromium is updated to look at
116 # CHROMEOS_RELEASE_VERSION for UserAgent data.
117 cat <<EOF | sudo dd of="${ROOT_FS_DIR}/etc/lsb-release"
118 CHROMEOS_RELEASE_CODENAME=$CHROMEOS_VERSION_CODENAME
119 CHROMEOS_RELEASE_DESCRIPTION=$CHROMEOS_VERSION_DESCRIPTION
120 CHROMEOS_RELEASE_NAME=$CHROMEOS_VERSION_NAME
121 CHROMEOS_RELEASE_TRACK=$CHROMEOS_VERSION_TRACK
122 CHROMEOS_RELEASE_VERSION=$CHROMEOS_VERSION_STRING
123 GOOGLE_RELEASE=$CHROMEOS_VERSION_STRING
124 CHROMEOS_AUSERVER=$CHROMEOS_VERSION_AUSERVER
125 CHROMEOS_DEVSERVER=$CHROMEOS_VERSION_DEVSERVER
126 EOF
127
128 # Turn user metrics logging on for official builds only.
129 if [ ${CHROMEOS_OFFICIAL:-0} -eq 1 ]; then
130 sudo touch "${ROOT_FS_DIR}/etc/send_metrics"
131 fi
132
133 # Set timezone symlink
134 sudo rm -f "${ROOT_FS_DIR}/etc/localtime"
135 sudo ln -s /mnt/stateful_partition/etc/localtime "${ROOT_FS_DIR}/etc/localtime"
136
137 # make a mountpoint for stateful partition
138 sudo mkdir -p "$ROOT_FS_DIR"/mnt/stateful_partition
139 sudo chmod 0755 "$ROOT_FS_DIR"/mnt
140 sudo chmod 0755 "$ROOT_FS_DIR"/mnt/stateful_partition
141
142 # Copy everything from the rootfs_static_data directory to the corresponding
143 # place on the filesystem. Note that this step has to occur after we've
144 # installed all of the packages.
145 TMP_STATIC=$(mktemp -d)
146 sudo cp -r "${SRC_ROOT}/rootfs_static_data/common/." "$TMP_STATIC"
147 # TODO: Copy additional arch-platform-specific subdirectories.
148 sudo chmod -R a+rX "$TMP_STATIC/."
149 sudo cp -r "$TMP_STATIC/." "$ROOT_FS_DIR"
150 sudo rm -rf "$TMP_STATIC"
151
152 # Fix issue where alsa-base (dependency of alsa-utils) is messing up our sound
153 # drivers. The stock modprobe settings worked fine.
154 # TODO: Revisit when we have decided on how sound will work on chromeos.
155 ! sudo rm "${ROOT_FS_DIR}/etc/modprobe.d/alsa-base.conf"
156
157 # Remove unneeded fonts.
158 sudo rm -rf "${ROOT_FS_DIR}/usr/share/fonts/X11"
159
160 # The udev daemon takes a long time to start up and settle so we defer it until
161 # after X11 has been started. In order to be able to mount the root file system
162 # and start X we pre-populate some devices. These are copied into /dev by the
163 # chromeos_startup script.
164 # TODO: Hopefully some of this can be taken care of by devtmpfs.
165 DEVICES_DIR="${ROOT_FS_DIR}/lib/chromiumos/devices"
166 sudo mkdir -p "$DEVICES_DIR"/dri
167 sudo mkdir -p "$DEVICES_DIR"/input
168 sudo mkdir -p "$DEVICES_DIR"/pts
169 sudo mkdir -p "$DEVICES_DIR"/shm
170 sudo ln -sf /proc/self/fd "$DEVICES_DIR"/fd
171 sudo ln -sf /proc/self/fd/0 "$DEVICES_DIR"/stdin
172 sudo ln -sf /proc/self/fd/1 "$DEVICES_DIR"/stdout
173 sudo ln -sf /proc/self/fd/2 "$DEVICES_DIR"/stderr
174 sudo mknod --mode=0600 "$DEVICES_DIR"/initctl p
175 sudo mknod --mode=0640 "$DEVICES_DIR"/mem c 1 1
176 sudo mknod --mode=0666 "$DEVICES_DIR"/null c 1 3
177 sudo mknod --mode=0666 "$DEVICES_DIR"/zero c 1 5
178 sudo mknod --mode=0666 "$DEVICES_DIR"/random c 1 8
179 sudo mknod --mode=0666 "$DEVICES_DIR"/urandom c 1 9
180 sudo mknod --mode=0660 "$DEVICES_DIR"/tty0 c 4 0
181 sudo mknod --mode=0660 "$DEVICES_DIR"/tty1 c 4 1
182 sudo mknod --mode=0660 "$DEVICES_DIR"/tty2 c 4 2
183 sudo mknod --mode=0666 "$DEVICES_DIR"/tty c 5 0
184 sudo mknod --mode=0660 "$DEVICES_DIR"/ttyMSM2 c 252 2
185 sudo mknod --mode=0600 "$DEVICES_DIR"/console c 5 1
186 sudo mknod --mode=0666 "$DEVICES_DIR"/ptmx c 5 2
187 sudo mknod --mode=0666 "$DEVICES_DIR"/loop0 b 7 0
188 sudo mknod --mode=0660 "$DEVICES_DIR"/sda b 8 0
189 sudo mknod --mode=0660 "$DEVICES_DIR"/sda1 b 8 1
190 sudo mknod --mode=0660 "$DEVICES_DIR"/sda2 b 8 2
191 sudo mknod --mode=0660 "$DEVICES_DIR"/sda3 b 8 3
192 sudo mknod --mode=0660 "$DEVICES_DIR"/sda4 b 8 4
193 sudo mknod --mode=0660 "$DEVICES_DIR"/sdb b 8 16
194 sudo mknod --mode=0660 "$DEVICES_DIR"/sdb1 b 8 17
195 sudo mknod --mode=0660 "$DEVICES_DIR"/sdb2 b 8 18
196 sudo mknod --mode=0660 "$DEVICES_DIR"/sdb3 b 8 19
197 sudo mknod --mode=0660 "$DEVICES_DIR"/sdb4 b 8 20
198 sudo mknod --mode=0640 "$DEVICES_DIR"/input/mouse0 c 13 32
199 sudo mknod --mode=0640 "$DEVICES_DIR"/input/mice c 13 63
200 sudo mknod --mode=0640 "$DEVICES_DIR"/input/event0 c 13 64
201 sudo mknod --mode=0640 "$DEVICES_DIR"/input/event1 c 13 65
202 sudo mknod --mode=0640 "$DEVICES_DIR"/input/event2 c 13 66
203 sudo mknod --mode=0640 "$DEVICES_DIR"/input/event3 c 13 67
204 sudo mknod --mode=0640 "$DEVICES_DIR"/input/event4 c 13 68
205 sudo mknod --mode=0640 "$DEVICES_DIR"/input/event5 c 13 69
206 sudo mknod --mode=0640 "$DEVICES_DIR"/input/event6 c 13 70
207 sudo mknod --mode=0640 "$DEVICES_DIR"/input/event7 c 13 71
208 sudo mknod --mode=0640 "$DEVICES_DIR"/input/event8 c 13 72
209 sudo mknod --mode=0660 "$DEVICES_DIR"/fb0 c 29 0
210 sudo mknod --mode=0660 "$DEVICES_DIR"/dri/card0 c 226 0
211 sudo chown root.tty "$DEVICES_DIR"/tty*
212 sudo chown root.kmem "$DEVICES_DIR"/mem
213 sudo chown root.disk "$DEVICES_DIR"/sda*
214 sudo chown root.video "$DEVICES_DIR"/fb0
215 sudo chown root.video "$DEVICES_DIR"/dri/card0
216
217 # Since we may mount read-only, our mtab should symlink to /proc
218 sudo ln -sf /proc/mounts "${ROOT_FS_DIR}/etc/mtab"
219
220 # For the most part, we use our own set of Upstart jobs that were installed
221 # in /etc/init.chromeos so as not to mingle with jobs installed by various
222 # packages. We fix that up now.
223 sudo cp "${ROOT_FS_DIR}/etc/init/tty2.conf" "${ROOT_FS_DIR}/etc/init.chromeos"
224 sudo rm -rf "${ROOT_FS_DIR}/etc/init"
225 sudo mv "${ROOT_FS_DIR}/etc/init.chromeos" "${ROOT_FS_DIR}/etc/init"
226
227 # By default, xkb writes computed configuration data to
228 # /var/lib/xkb. It can re-use this data to reduce startup
229 # time. In addition, if it fails to write we've observed
230 # keyboard issues. We add a symlink to allow these writes.
231 sudo rm -rf "${ROOT_FS_DIR}/var/lib/xkb"
232 sudo ln -s /var/cache "${ROOT_FS_DIR}/var/lib/xkb"
233
234 # This is needed so that devicekit-disks has a place to
235 # put its sql lite database. Since we do not need to
236 # retain this information across boots, we are just
237 # putting it in /var/tmp
238 sudo rm -rf "${ROOT_FS_DIR}/var/lib/DeviceKit-disks"
239 sudo ln -s /var/tmp "${ROOT_FS_DIR}/var/lib/DeviceKit-disks"
240
241 # dbus-uuidgen writes machine-id to /var/lib/dbus.
242 sudo rm -f "${ROOT_FS_DIR}/var/lib/dbus/machine-id"
243 sudo ln -s /var/cache/machine-id "${ROOT_FS_DIR}/var/lib/dbus/machine-id"
244
245 # Remove pam-mount's default entry in common-auth and common-session
246 sudo sed -i 's/^\(.*pam_mount.so.*\)/#\1/g' "${ROOT_FS_DIR}"/etc/pam.d/common-*
247
248 # A nice fake hostname to keep things happy.
249 echo "localhost" | sudo dd of="${ROOT_FS_DIR}/etc/hostname"
250
251 # Clear the network settings. This must be done last, since it prevents
252 # any subsequent steps from accessing the network.
253 cat <<EOF | sudo dd of="${ROOT_FS_DIR}/etc/network/interfaces"
254 auto lo
255 iface lo inet loopback
256 EOF
257
258 cat <<EOF | sudo dd of="${ROOT_FS_DIR}/etc/resolv.conf"
259 # Use the connman dns proxy.
260 nameserver 127.0.0.1
261 EOF
262 sudo chmod a-wx "${ROOT_FS_DIR}/etc/resolv.conf"
OLDNEW
« no previous file with comments | « src/scripts/build_platform_packages.sh ('k') | src/scripts/dpkg_no_scripts.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698