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

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

Issue 520004: Moved debootstrap phase from build_image.sh to install_packages.sh. (Closed)
Patch Set: Fixed flag defaults. Moved bootchart. Created 10 years, 12 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/package_repo/package-list-prod.txt ('k') | src/scripts/install_packages.sh » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/bin/bash 1 #!/bin/bash
2 2
3 # Copyright (c) 2009 The Chromium OS Authors. All rights reserved. 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 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 # Script to build a bootable keyfob-based chromeos system image. 7 # Script to build a bootable keyfob-based chromeos system image.
8 # It uses debootstrap (see https://wiki.ubuntu.com/DebootstrapChroot) to 8 # It uses debootstrap (see https://wiki.ubuntu.com/DebootstrapChroot) to
9 # create a base file system. It then cusotmizes the file system and adds 9 # create a base file system. It then cusotmizes the file system and adds
10 # Ubuntu and chromeos specific packages. Finally, it creates a bootable USB 10 # Ubuntu and chromeos specific packages. Finally, it creates a bootable USB
(...skipping 20 matching lines...) Expand all
31 "Root of build output" 31 "Root of build output"
32 DEFINE_boolean replace $FLAGS_FALSE "Overwrite existing output, if any." 32 DEFINE_boolean replace $FLAGS_FALSE "Overwrite existing output, if any."
33 DEFINE_boolean increment $FLAGS_FALSE \ 33 DEFINE_boolean increment $FLAGS_FALSE \
34 "Picks the latest build and increments the minor version by one." 34 "Picks the latest build and increments the minor version by one."
35 35
36 DEFINE_string mirror "$DEFAULT_IMG_MIRROR" "Repository mirror to use." 36 DEFINE_string mirror "$DEFAULT_IMG_MIRROR" "Repository mirror to use."
37 DEFINE_string suite "$DEFAULT_IMG_SUITE" "Repository suite to base image on." 37 DEFINE_string suite "$DEFAULT_IMG_SUITE" "Repository suite to base image on."
38 DEFINE_string pkglist "$DEFAULT_PKGLIST" \ 38 DEFINE_string pkglist "$DEFAULT_PKGLIST" \
39 "Name of file listing packages to install from repository." 39 "Name of file listing packages to install from repository."
40 40
41 KERNEL_DEB_PATH=$(find "${FLAGS_build_root}/x86/local_packages" -name "linux-ima ge-*.deb")
42 KERNEL_DEB=$(basename "${KERNEL_DEB_PATH}" .deb | sed -e 's/linux-image-//' -e ' s/_.*//')
43 KERNEL_VERSION=${KERNEL_VERSION:-${KERNEL_DEB}}
44
45 # Parse command line 41 # Parse command line
46 FLAGS "$@" || exit 1 42 FLAGS "$@" || exit 1
47 eval set -- "${FLAGS_ARGV}" 43 eval set -- "${FLAGS_ARGV}"
48 44
49 # Die on any errors. 45 # Die on any errors.
50 set -e 46 set -e
51 47
52 # Determine build version 48 # Determine build version
53 . "${SCRIPTS_DIR}/chromeos_version.sh" 49 . "${SCRIPTS_DIR}/chromeos_version.sh"
54 50
55 # Use canonical path since some tools (e.g. mount) do not like symlinks 51 # Use canonical path since some tools (e.g. mount) do not like symlinks
56 # Append build attempt to output directory 52 # Append build attempt to output directory
57 IMAGE_SUBDIR="${CHROMEOS_VERSION_STRING}-a${FLAGS_build_attempt}" 53 IMAGE_SUBDIR="${CHROMEOS_VERSION_STRING}-a${FLAGS_build_attempt}"
58 OUTPUT_DIR="${FLAGS_output_root}/${IMAGE_SUBDIR}" 54 OUTPUT_DIR="${FLAGS_output_root}/${IMAGE_SUBDIR}"
59 ROOT_FS_DIR="${OUTPUT_DIR}/rootfs" 55 ROOT_FS_DIR="${OUTPUT_DIR}/rootfs"
60 ROOT_FS_IMG="${OUTPUT_DIR}/rootfs.image" 56 ROOT_FS_IMG="${OUTPUT_DIR}/rootfs.image"
61 MBR_IMG="${OUTPUT_DIR}/mbr.image" 57 MBR_IMG="${OUTPUT_DIR}/mbr.image"
62 OUTPUT_IMG="${OUTPUT_DIR}/usb.img" 58 OUTPUT_IMG="${OUTPUT_DIR}/usb.img"
63 SETUP_DIR="${OUTPUT_DIR}/tmp"
64 59
65 LOOP_DEV= 60 LOOP_DEV=
66 61
67 # Handle existing directory 62 # Handle existing directory
68 if [ -e "$OUTPUT_DIR" ] 63 if [ -e "$OUTPUT_DIR" ]
69 then 64 then
70 if [ $FLAGS_replace -eq $FLAGS_TRUE ] 65 if [ $FLAGS_replace -eq $FLAGS_TRUE ]
71 then 66 then
72 sudo rm -rf "$OUTPUT_DIR" 67 sudo rm -rf "$OUTPUT_DIR"
73 else 68 else
74 echo "Directory $OUTPUT_DIR already exists." 69 echo "Directory $OUTPUT_DIR already exists."
75 echo "Use --build_attempt option to specify an unused attempt." 70 echo "Use --build_attempt option to specify an unused attempt."
76 echo "Or use --replace if you want to overwrite this directory." 71 echo "Or use --replace if you want to overwrite this directory."
77 exit 1 72 exit 1
78 fi 73 fi
79 fi 74 fi
80 75
81 # create the output directory 76 # create the output directory
82 mkdir -p "$OUTPUT_DIR" 77 mkdir -p "$OUTPUT_DIR"
83 78
84 # Make sure anything mounted in the rootfs is cleaned up ok on exit.
85 cleanup_rootfs_mounts() {
86 # Occasionally there are some daemons left hanging around that have our
87 # root image file system open. We do a best effort attempt to kill them.
88 PIDS=`sudo lsof -t "$ROOT_FS_DIR" | sort | uniq`
89 for pid in $PIDS
90 do
91 local cmdline=`cat /proc/$pid/cmdline`
92 echo "Killing process that has open file on our rootfs: $cmdline"
93 ! sudo kill $pid # Preceded by ! to disable ERR trap.
94 done
95
96 # Sometimes the volatile directory is left mounted and sometimes it is not,
97 # so we precede by '!' to disable the ERR trap.
98 ! sudo umount "$ROOT_FS_DIR"/lib/modules/2.6.*/volatile/
99
100 sudo umount "${ROOT_FS_DIR}/proc"
101 sudo umount "${ROOT_FS_DIR}/sys"
102 }
103
104 cleanup_rootfs_loop() { 79 cleanup_rootfs_loop() {
105 sudo umount "$LOOP_DEV" 80 sudo umount "$LOOP_DEV"
106 sleep 1 # in case $LOOP_DEV is in use 81 sleep 1 # in case $LOOP_DEV is in use
107 sudo losetup -d "$LOOP_DEV" 82 sudo losetup -d "$LOOP_DEV"
83 LOOP_DEV=""
108 } 84 }
109 85
110 cleanup() { 86 cleanup() {
111 # Disable die on error. 87 # Disable die on error.
112 set +e 88 set +e
113
114 cleanup_rootfs_mounts
115 if [ -n "$LOOP_DEV" ] 89 if [ -n "$LOOP_DEV" ]
116 then 90 then
117 cleanup_rootfs_loop 91 cleanup_rootfs_loop
118 fi 92 fi
119 93
120 # Turn die on error back on. 94 # Turn die on error back on.
121 set -e 95 set -e
122 } 96 }
123 trap cleanup EXIT 97 trap cleanup EXIT
124 98
(...skipping 10 matching lines...) Expand all
135 sudo touch /etc/mtab 109 sudo touch /etc/mtab
136 fi 110 fi
137 UUID=`uuidgen` 111 UUID=`uuidgen`
138 DISK_LABEL=C-ROOT 112 DISK_LABEL=C-ROOT
139 LOOP_DEV=`sudo losetup -f` 113 LOOP_DEV=`sudo losetup -f`
140 sudo losetup "$LOOP_DEV" "$ROOT_FS_IMG" 114 sudo losetup "$LOOP_DEV" "$ROOT_FS_IMG"
141 sudo mkfs.ext3 "$LOOP_DEV" 115 sudo mkfs.ext3 "$LOOP_DEV"
142 sudo tune2fs -L "$DISK_LABEL" -U "$UUID" -c 0 -i 0 "$LOOP_DEV" 116 sudo tune2fs -L "$DISK_LABEL" -U "$UUID" -c 0 -i 0 "$LOOP_DEV"
143 sudo mount "$LOOP_DEV" "$ROOT_FS_DIR" 117 sudo mount "$LOOP_DEV" "$ROOT_FS_DIR"
144 118
145 # Add debootstrap link for the suite, if it doesn't exist. 119 # -- Install packages and customize root file system. --
146 if [ ! -e "/usr/share/debootstrap/scripts/$FLAGS_suite" ]
147 then
148 sudo ln -s /usr/share/debootstrap/scripts/jaunty \
149 "/usr/share/debootstrap/scripts/$FLAGS_suite"
150 fi
151 120
152 # Bootstrap the base debian file system
153 # TODO: Switch to --variant=minbase
154 sudo debootstrap --arch=i386 $FLAGS_suite "$ROOT_FS_DIR" "${FLAGS_mirror}"
155
156 # -- Customize the root file system --
157
158 # Set up mounts for working within the chroot. We copy some basic
159 # network information from the host so that the chroot can access
160 # repositories on the network as needed.
161 sudo mount -t proc proc "${ROOT_FS_DIR}/proc"
162 sudo mount -t sysfs sysfs "${ROOT_FS_DIR}/sys" # TODO: Do we need sysfs?
163 sudo cp /etc/hosts "${ROOT_FS_DIR}/etc"
164
165 # Create setup directory and copy over scripts, config files, and locally
166 # built packages.
167 mkdir -p "$SETUP_DIR"
168 mkdir -p "${SETUP_DIR}/local_packages"
169 cp "${FLAGS_build_root}/x86/local_packages"/* "${SETUP_DIR}/local_packages"
170
171 # Set up repository for local packages to install in the rootfs via apt-get.
172 cd "$SETUP_DIR"
173 dpkg-scanpackages local_packages/ /dev/null | \
174 gzip > local_packages/Packages.gz
175 cd -
176
177 # Run the package install script
178 "${SCRIPTS_DIR}/install_packages.sh" \ 121 "${SCRIPTS_DIR}/install_packages.sh" \
122 --build_root="${FLAGS_build_root}" \
179 --root="$ROOT_FS_DIR" \ 123 --root="$ROOT_FS_DIR" \
180 --output_dir="${OUTPUT_DIR}" \ 124 --output_dir="${OUTPUT_DIR}" \
181 --setup_dir="${SETUP_DIR}" \
182 --package_list="$FLAGS_pkglist" \ 125 --package_list="$FLAGS_pkglist" \
183 --server="$FLAGS_mirror" \ 126 --server="$FLAGS_mirror" \
184 --suite="$FLAGS_suite" \ 127 --suite="$FLAGS_suite"
185 --kernel_version="$KERNEL_VERSION"
186 128
187 # Run the script to customize the resulting root file system.
188 "${SCRIPTS_DIR}/customize_rootfs.sh" --root="${ROOT_FS_DIR}" 129 "${SCRIPTS_DIR}/customize_rootfs.sh" --root="${ROOT_FS_DIR}"
189 130
190 # Unmount mounts within the rootfs so it is ready to be imaged.
191 cleanup_rootfs_mounts
192
193 # -- Turn root file system into bootable image -- 131 # -- Turn root file system into bootable image --
194 132
195 # Setup extlinux configuration. 133 # Setup extlinux configuration.
196 # TODO: For some reason the /dev/disk/by-uuid is not being generated by udev 134 # TODO: For some reason the /dev/disk/by-uuid is not being generated by udev
197 # in the initramfs. When we figure that out, switch to root=UUID=$UUID. 135 # in the initramfs. When we figure that out, switch to root=UUID=$UUID.
198 cat <<EOF | sudo dd of="$ROOT_FS_DIR"/boot/extlinux.conf 136 cat <<EOF | sudo dd of="$ROOT_FS_DIR"/boot/extlinux.conf
199 DEFAULT chromeos-usb 137 DEFAULT chromeos-usb
200 PROMPT 0 138 PROMPT 0
201 TIMEOUT 0 139 TIMEOUT 0
202 140
(...skipping 28 matching lines...) Expand all
231 EOF 169 EOF
232 170
233 OUTSIDE_OUTPUT_DIR="${EXTERNAL_TRUNK_PATH}/src/build/images/${IMAGE_SUBDIR}" 171 OUTSIDE_OUTPUT_DIR="${EXTERNAL_TRUNK_PATH}/src/build/images/${IMAGE_SUBDIR}"
234 echo "Done. Image created in ${OUTPUT_DIR}" 172 echo "Done. Image created in ${OUTPUT_DIR}"
235 echo "To copy to USB keyfob, outside the chroot, do something like:" 173 echo "To copy to USB keyfob, outside the chroot, do something like:"
236 echo " ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR} --to=/dev/sdb" 174 echo " ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR} --to=/dev/sdb"
237 echo "To convert to VMWare image, outside the chroot, do something like:" 175 echo "To convert to VMWare image, outside the chroot, do something like:"
238 echo " ./image_to_vmware.sh --from=${OUTSIDE_OUTPUT_DIR}" 176 echo " ./image_to_vmware.sh --from=${OUTSIDE_OUTPUT_DIR}"
239 177
240 trap - EXIT 178 trap - EXIT
OLDNEW
« no previous file with comments | « src/package_repo/package-list-prod.txt ('k') | src/scripts/install_packages.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698