Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 install packages into the target root file system. | 7 # Script to install packages into the target root file system. |
| 8 # | 8 # |
| 9 # NOTE: This script should be called by build_image.sh. Do not run this | 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. | 10 # on your own unless you know what you are doing. |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 70 local cmdline=`cat /proc/$pid/cmdline` | 70 local cmdline=`cat /proc/$pid/cmdline` |
| 71 echo "Killing process that has open file on our rootfs: $cmdline" | 71 echo "Killing process that has open file on our rootfs: $cmdline" |
| 72 ! sudo kill $pid # Preceded by ! to disable ERR trap. | 72 ! sudo kill $pid # Preceded by ! to disable ERR trap. |
| 73 done | 73 done |
| 74 | 74 |
| 75 # Sometimes the volatile directory is left mounted and sometimes it is not, | 75 # Sometimes the volatile directory is left mounted and sometimes it is not, |
| 76 # so we precede by '!' to disable the ERR trap. | 76 # so we precede by '!' to disable the ERR trap. |
| 77 ! sudo umount "$ROOT_FS_DIR"/lib/modules/2.6.*/volatile/ > /dev/null 2>&1 | 77 ! sudo umount "$ROOT_FS_DIR"/lib/modules/2.6.*/volatile/ > /dev/null 2>&1 |
| 78 | 78 |
| 79 sudo umount "${ROOT_FS_DIR}/proc" | 79 sudo umount "${ROOT_FS_DIR}/proc" |
| 80 sudo umount "${ROOT_FS_DIR}/sys" | |
| 81 } | 80 } |
| 82 | 81 |
| 83 # Create setup directory and copy over scripts, config files, and locally | 82 # Create setup directory and copy over scripts, config files, and locally |
| 84 # built packages. | 83 # built packages. |
| 85 mkdir -p "${SETUP_DIR}/local_packages" | 84 mkdir -p "${SETUP_DIR}/local_packages" |
| 86 cp "${FLAGS_build_root}/${FLAGS_target}/local_packages"/* \ | 85 cp "${FLAGS_build_root}/${FLAGS_target}/local_packages"/* \ |
| 87 "${SETUP_DIR}/local_packages" | 86 "${SETUP_DIR}/local_packages" |
| 88 | 87 |
| 89 # Set up repository for local packages to install in the rootfs via apt-get. | 88 # Set up repository for local packages to install in the rootfs via apt-get. |
| 90 cd "$SETUP_DIR" | 89 cd "$SETUP_DIR" |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 160 # Use debootstrap, which runs maintainer scripts. | 159 # Use debootstrap, which runs maintainer scripts. |
| 161 sudo debootstrap --arch=i386 $FLAGS_suite "$ROOT_FS_DIR" "${FLAGS_server}" | 160 sudo debootstrap --arch=i386 $FLAGS_suite "$ROOT_FS_DIR" "${FLAGS_server}" |
| 162 else | 161 else |
| 163 # A hack-in-progress that does our own debootstrap equivalent and skips | 162 # A hack-in-progress that does our own debootstrap equivalent and skips |
| 164 # maintainer scripts. | 163 # maintainer scripts. |
| 165 | 164 |
| 166 # TODO: Replace with a pointer to lool's repo or maybe apt-get --download-only ? | 165 # TODO: Replace with a pointer to lool's repo or maybe apt-get --download-only ? |
| 167 REPO="${GCLIENT_ROOT}/repo/var/cache/make_local_repo" | 166 REPO="${GCLIENT_ROOT}/repo/var/cache/make_local_repo" |
| 168 | 167 |
| 169 # The set of required packages before apt can take over. | 168 # The set of required packages before apt can take over. |
| 170 # TODO: Trim this as much as possible. It is *very* picky, so be careful. | 169 PACKAGES="debconf libacl1 libattr1 libc6 libgcc1 libselinux1" |
| 171 PACKAGES="base-files base-passwd bash bsdutils coreutils dash debconf debconf- i18n debianutils diff dpkg e2fslibs e2fsprogs findutils gcc-4.4-base grep gzip h ostname initscripts insserv libacl1 libattr1 libblkid1 libc-bin libc6 libcomerr2 libdb4.7 libdbus-1-3 libgcc1 liblocale-gettext-perl libncurses5 libpam-modules libpam-runtime libpam0g libselinux1 libsepol1 libslang2 libss2 libssl0.9.8 libst dc++6 libtext-charwidth-perl libtext-iconv-perl libtext-wrapi18n-perl libudev0 l ibuuid1 locales login lsb-base lzma makedev mawk mount mountall ncurses-base ncu rses-bin passwd perl-base procps python-minimal python2.6-minimal sed sysv-rc sy svinit-utils tar tzdata upstart util-linux zlib1g apt" | 170 |
| 171 # Set of packages that we need to install early so that other packages | |
| 172 # maintainer scripts can still basically run. | |
| 173 # | |
| 174 # login - So that groupadd will work | |
| 175 # base-passwd/passwd - So that chmod and useradd/groupadd will work | |
| 176 # bash - So that scripts can run | |
| 177 # libpam-runtim/libuuid1 - Not exactly sure why | |
| 178 EXTRA_PACKAGES="base-files base-passwd bash libpam-runtime libuuid1 login pass wd" | |
| 172 | 179 |
| 173 # Prep the rootfs to work with dpgk and apt | 180 # Prep the rootfs to work with dpgk and apt |
| 174 sudo mkdir -p "${ROOT_FS_DIR}/var/lib/dpkg/info" | 181 sudo mkdir -p "${ROOT_FS_DIR}/var/lib/dpkg/info" |
| 175 sudo touch "${ROOT_FS_DIR}/var/lib/dpkg/available" \ | 182 sudo touch "${ROOT_FS_DIR}/var/lib/dpkg/available" \ |
| 176 "${ROOT_FS_DIR}/var/lib/dpkg/diversions" \ | 183 "${ROOT_FS_DIR}/var/lib/dpkg/diversions" \ |
| 177 "${ROOT_FS_DIR}/var/lib/dpkg/status" | 184 "${ROOT_FS_DIR}/var/lib/dpkg/status" |
| 178 sudo mkdir -p "${ROOT_FS_DIR}/var/lib/apt/lists/partial" \ | 185 sudo mkdir -p "${ROOT_FS_DIR}/var/lib/apt/lists/partial" \ |
| 179 "${ROOT_FS_DIR}/var/lib/dpkg/updates" | 186 "${ROOT_FS_DIR}/var/lib/dpkg/updates" |
| 180 | 187 |
| 181 i=0 | 188 i=0 |
| 182 for p in $PACKAGES; do | 189 for p in $PACKAGES $EXTRA_PACKAGES; do |
| 183 set +e | 190 set +e |
| 184 PKG=$(ls "${REPO}"/${p}*_i386.deb) | 191 PKG=$(ls "${REPO}"/${p}_*_i386.deb) |
|
Bill Richardson
2010/01/07 18:25:40
This is for the target filesystem, not the chroot,
| |
| 185 set -e | 192 set -e |
| 186 if [ -z "$PKG" ]; then | 193 if [ -z "$PKG" ]; then |
| 187 PKG=$(ls "${REPO}"/${p}*_all.deb) | 194 PKG=$(ls "${REPO}"/${p}_*_all.deb) |
| 188 fi | 195 fi |
| 189 echo "Installing package: $PKG [$i]" | 196 echo "Installing package: $PKG [$i]" |
| 190 sudo "${SCRIPTS_DIR}"/dpkg_no_scripts.sh \ | 197 sudo "${SCRIPTS_DIR}"/dpkg_no_scripts.sh \ |
| 191 --root="$ROOT_FS_DIR" --unpack "$PKG" | 198 --root="$ROOT_FS_DIR" --unpack "$PKG" |
| 192 i=$((i + 1)) | 199 i=$((i + 1)) |
| 193 done | 200 done |
| 194 | 201 |
| 202 # ----- MAINTAINER SCRIPT FIXUPS ----- | |
| 203 | |
| 195 # TODO: Remove when we stop having maintainer scripts altogether. | 204 # TODO: Remove when we stop having maintainer scripts altogether. |
| 196 sudo cp -a /dev/* "${ROOT_FS_DIR}/dev" | 205 sudo cp -a /dev/* "${ROOT_FS_DIR}/dev" |
| 197 | 206 |
| 198 # ----- MAINTAINER SCRIPT FIXUPS ----- | |
| 199 | |
| 200 # base-passwd | 207 # base-passwd |
| 201 sudo cp "${ROOT_FS_DIR}/usr/share/base-passwd/passwd.master" \ | 208 sudo cp "${ROOT_FS_DIR}/usr/share/base-passwd/passwd.master" \ |
| 202 "${ROOT_FS_DIR}/etc/passwd" | 209 "${ROOT_FS_DIR}/etc/passwd" |
| 203 sudo cp "${ROOT_FS_DIR}/usr/share/base-passwd/group.master" \ | 210 sudo cp "${ROOT_FS_DIR}/usr/share/base-passwd/group.master" \ |
| 204 "${ROOT_FS_DIR}/etc/group" | 211 "${ROOT_FS_DIR}/etc/group" |
| 205 | 212 |
| 206 # libpam-runtime | 213 # libpam-runtime |
| 207 # The postinst script calls pam-auth-update, which is a perl script that | 214 # The postinst script calls pam-auth-update, which is a perl script that |
| 208 # expects to run within the targetfs. Until we fix this, we just copy | 215 # expects to run within the targetfs. Until we fix this, we just copy |
| 209 # from the build chroot. | 216 # from the build chroot. |
| 210 sudo cp -a /etc/pam.d/common-* \ | 217 sudo cp -a /etc/pam.d/common-* \ |
| 211 /etc/pam.d/login \ | 218 /etc/pam.d/login \ |
| 212 /etc/pam.d/newusers \ | 219 /etc/pam.d/newusers \ |
| 213 /etc/pam.d/su \ | 220 /etc/pam.d/su \ |
| 214 /etc/pam.d/sudo \ | 221 /etc/pam.d/sudo \ |
| 215 "${ROOT_FS_DIR}/etc/pam.d/" | 222 "${ROOT_FS_DIR}/etc/pam.d/" |
| 216 | 223 |
| 217 # mawk | 224 # mawk |
| 218 sudo ln -s mawk "${ROOT_FS_DIR}/usr/bin/awk" | 225 sudo ln -s mawk "${ROOT_FS_DIR}/usr/bin/awk" |
| 219 | 226 |
| 220 # base-files? | 227 # base-files? |
| 221 sudo touch "${ROOT_FS_DIR}/etc/fstab" | 228 sudo touch "${ROOT_FS_DIR}/etc/fstab" |
| 229 | |
| 230 # sysv-rc needs this | |
| 231 sudo mkdir -p "${ROOT_FS_DIR}/etc/init.d" | |
| 222 fi # EXPERIMENTAL_NO_DEBOOTSTRAP | 232 fi # EXPERIMENTAL_NO_DEBOOTSTRAP |
| 223 | 233 |
| 224 | 234 |
| 225 # Set up mounts for working within the rootfs. We copy some basic | 235 # Set up mounts for working within the rootfs. We copy some basic |
| 226 # network information from the host so that maintainer scripts can | 236 # network information from the host so that maintainer scripts can |
| 227 # access the network as needed. | 237 # access the network as needed. |
| 228 # TODO: All of this rootfs mount stuff can be removed as soon as we stop | 238 # TODO: All of this rootfs mount stuff can be removed as soon as we stop |
| 229 # running the maintainer scripts on install. | 239 # running the maintainer scripts on install. |
| 230 sudo mount -t proc proc "${ROOT_FS_DIR}/proc" | 240 sudo mount -t proc proc "${ROOT_FS_DIR}/proc" |
| 231 sudo mount -t sysfs sysfs "${ROOT_FS_DIR}/sys" # TODO: Do we need sysfs? | |
| 232 sudo cp /etc/hosts "${ROOT_FS_DIR}/etc" | 241 sudo cp /etc/hosts "${ROOT_FS_DIR}/etc" |
| 233 trap cleanup_rootfs_mounts EXIT | 242 trap cleanup_rootfs_mounts EXIT |
| 234 | 243 |
| 235 # Make sure that apt is ready to work. | 244 # Make sure that apt is ready to work. We use --fix-broken to trigger apt |
| 245 # to install additional critical packages. If there are any of these, we | |
| 246 # disable the maintainer scripts so they install ok. | |
| 236 sudo APT_CONFIG="$APT_CONFIG" DEBIAN_FRONTEND=noninteractive apt-get update | 247 sudo APT_CONFIG="$APT_CONFIG" DEBIAN_FRONTEND=noninteractive apt-get update |
| 237 | 248 TMP_FORCE_NO_SCRIPTS="-o=Dir::Bin::dpkg=${SCRIPTS_DIR}/dpkg_no_scripts.sh" |
| 238 # TODO: We found that apt-get install --fix-broken is needed. It removes some | |
| 239 # -dev packages and we need to allow it to run maintainer scripts for now. | |
| 240 TMP_FORCE_DPKG="-o=Dir::Bin::dpkg=/usr/bin/dpkg" | |
| 241 sudo APT_CONFIG="$APT_CONFIG" DEBIAN_FRONTEND=noninteractive \ | 249 sudo APT_CONFIG="$APT_CONFIG" DEBIAN_FRONTEND=noninteractive \ |
| 242 apt-get $TMP_FORCE_DPKG --force-yes -f install | 250 apt-get $TMP_FORCE_NO_SCRIPTS --force-yes --fix-broken install |
| 243 | 251 |
| 244 # Install prod packages | 252 # Install prod packages |
| 245 COMPONENTS=`cat $FLAGS_package_list | grep -v ' *#' | grep -v '^ *$' | sed '/$/{ N;s/\n/ /;}'` | 253 COMPONENTS=`cat $FLAGS_package_list | grep -v ' *#' | grep -v '^ *$' | sed '/$/{ N;s/\n/ /;}'` |
| 246 sudo APT_CONFIG="$APT_CONFIG" DEBIAN_FRONTEND=noninteractive \ | 254 sudo APT_CONFIG="$APT_CONFIG" DEBIAN_FRONTEND=noninteractive \ |
| 247 apt-get --force-yes install $COMPONENTS | 255 apt-get --force-yes install $COMPONENTS |
| 248 | 256 |
| 249 # Create kernel installation configuration to suppress warnings, | 257 # Create kernel installation configuration to suppress warnings, |
| 250 # install the kernel in /boot, and manage symlinks. | 258 # install the kernel in /boot, and manage symlinks. |
| 251 cat <<EOF | sudo dd of="${ROOT_FS_DIR}/etc/kernel-img.conf" | 259 cat <<EOF | sudo dd of="${ROOT_FS_DIR}/etc/kernel-img.conf" |
| 252 link_in_boot = yes | 260 link_in_boot = yes |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 271 sudo rm -rf "$APT_CACHE_DIR" | 279 sudo rm -rf "$APT_CACHE_DIR" |
| 272 | 280 |
| 273 # List all packages installed so far, since these are what the local | 281 # List all packages installed so far, since these are what the local |
| 274 # repository needs to contain. | 282 # repository needs to contain. |
| 275 # TODO: Replace with list_installed_packages.sh when it is fixed up. | 283 # TODO: Replace with list_installed_packages.sh when it is fixed up. |
| 276 dpkg --root="${ROOT_FS_DIR}" -l > \ | 284 dpkg --root="${ROOT_FS_DIR}" -l > \ |
| 277 "${OUTPUT_DIR}/package_list_installed.txt" | 285 "${OUTPUT_DIR}/package_list_installed.txt" |
| 278 | 286 |
| 279 cleanup_rootfs_mounts | 287 cleanup_rootfs_mounts |
| 280 trap - EXIT | 288 trap - EXIT |
| OLD | NEW |