| #!/bin/sh |
| # Copyright (c) 2011 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. |
| # |
| # This script downloads and installs the basic packages that the user needs |
| # in developer mode. It also takes care of some configuration details |
| # that arise from not havin write access to the root filesystem. |
| |
| # TODO(arkaitzr): more details (and more code) to come. |
| |
| # Constant definitions. |
| PKG_BZIP2_FILE="dev-installer-latest.bz2" |
| # Python is not in the base image, so we use a statically linked python |
| # interpreter. The only version available for download is 2.7. |
| PYTHON_BINARY="python2.7-static" |
| # Color the script output a little. |
| ERROR_S_COLOR="\E[47;44m\033[1m" |
| ERROR_E_COLOR="\033[0m" |
| S_COLOR="\E[40;32m\033[1m" |
| E_COLOR="\033[0m" |
| |
| # This script should only run in developer mode or for developer images. |
| /usr/bin/crossystem cros_debug?0 |
| CROS_DEBUG=$? |
| |
| if [ ${CROS_DEBUG} -ne 1 ]; then |
| echo -en "${ERROR_S_COLOR}ERROR: Can not run script." |
| echo -en "Chrome OS is not in developer mode.${ERROR_E_COLOR}" |
| exit 1 |
| fi |
| |
| # Check if we are root. |
| if [[ $(/usr/bin/id -u) -ne 0 ]]; then |
| echo -en "${ERROR_S_COLOR}ERROR: Can not run script." |
| echo -en "You are not root or you did not use sudo.${ERROR_E_COLOR}" |
| exit 1 |
| fi |
| |
| # Create work directory. |
| WORKDIR="$(mktemp -d /tmp/dev-installer.XXXX)" |
| |
| # Get the static Python binary and portage (emerge script and python modules). |
| download_bootstrap_package() { |
| # Obtain the BOOTSTRAP and BINHOST variables. |
| source "/etc/portage/repository.conf" |
| local url |
| local tar_exit_code |
| url="${BOOTSTRAP}/${PKG_BZIP2_FILE}" |
| |
| wget -N -p "${WORKDIR}" $"{url}" |
| if [ ! -f "${WORKDIR}/${PKG_BZIP2_FILE}" ]; then |
| echo -en "${ERROR_S_COLOR}ERROR: Can not download dev-installer package." |
| echo -en "Check network connection and access to ${url}.${ERROR_E_COLOR}" |
| exit 1 |
| fi |
| |
| tar -C "${WORKDIR}" -xjf "${WORKDIR}/${PKG_BZIP2_FILE}" |
| tar_exit_code=$? |
| if [ tar_exit_code -ne 0 ]; then |
| echo -en "$ERROR_S_COLOR}ERROR: Can not extract dev-installer package." |
| echo -en "Command tar -C ${WORKDIR}-xjf ${PKG_BZIP2_FILE} failed." \ |
| "${ERROR_E_COLOR}" |
| exit 1 |
| fi |
| } |
| |
| # Install python and emerge in /usr/local. |
| install_emerge() { |
| chmod +x "${WORKDIR}/${PYTHON_BINARY}" |
| # Set PYTHONPATH so python can find portage's modules. |
| PYTHONPATH="${WORKDIR}/portage/pym" |
| export PYTHONPATH |
| |
| # TODO(arkaitzr): Create the directories defined in the portage config files. |
| source "/etc/make.profile/make.defaults" |
| |
| # Move packages to the appropiate directory in /usr/local. |
| # TODO(arkaitzr): once the binhost is setup, get packages from there via wget |
| # so they do not have to be included in the downloaded bz2 file (now 18MB). |
| mv "${WORKDIR}/app-misc" "/usr/local/portage/packages" |
| mv "${WORKDIR}/dev-lang" "/usr/local/portage/packages" |
| mv "${WORKDIR}/dev-libs" "/usr/local/portage/packages" |
| mv "${WORKDIR}/virtual" "/usr/local/portage/packages" |
| # First, we install python using the files from the downloaded package. |
| # We can not use the binhost because the static version of python included |
| # does not have module unicodedata (necessary for http connections). |
| "${WORKDIR}/${PYTHON_BINARY}" "${WORKDIR}/portage/bin/emerge" --usepkgonly \ |
| dev-lang/python |
| # Now we install portage using the binary packages from the binhost. |
| python "${WORKDIR}/portage/bin/emerge" --getbinpkgonly \ |
| --usepkgonly \ |
| portage |
| unset PYTHONPATH |
| } |
| |
| install_optional_packages() { |
| # TODO(arkaitzr): give the user the option of installing chromeos-dev pkgs. |
| echo "Do you want to install chrome-os/dev package and dependencies? (y/n)" |
| } |
| |
| cleanup_directories() { |
| rm -r "${WORKDIR}" |
| } |
| |
| # TODO(arkaitzr): add calls to download_bootstrap_package and install_emerge |
| # when repositories are configured. |
| echo -en "${S_COLOR}Starting installation of developer packages." |
| echo -en "First, we download the necessary files.${E_COLOR}" |
| download_bootstrap_package |
| |
| echo -en "${S_COLOR}Files downloaded, installing python and emerge."\ |
| "${E_COLOR}" |
| install_emerge |
| |
| echo -en "${S_COLOR}Emerge installation complete. Installing additional " \ |
| "packages.${E_COLOR}" |
| install_optional_packages |
| |
| echo -en "${S_COLOR}Cleaning temporary directories.${E_COLOR}" |
| cleanup_directories |
| |
| echo -en "${S_COLOR}Dev-install.sh done. Enjoy!${E_COLOR}" |
| |