[arch-general] Howto look outside chroot for local git tree?

Damien Churchill damoxc at gmail.com
Thu Mar 1 03:07:28 EST 2012


On 1 March 2012 00:13, David C. Rankin <drankinatty at suddenlinkmail.com> wrote:
> Guys,
>
>  Is it possible to look outside of the chroot while building in an archroot
> from the PKGBUILD to check for a local copy of a git tree? Logically, what I
> want to do from inside the archroot is:
>
> (1) check for an existing git source in the ${srcdir}
>
>  (if so, then use it)
>  (if not, then...)
>
> (2) check for a local copy of the git tree outside chroot
>
>    (if found)
>
>  (3) change to that directory and update and copy to ${srcdir}
>
>    (else)
>
>  (4) clone new copy into ${srcdir}
>
>
>  Is this even possible? I have made an attempt at implementing this, but I
> think I'm prevented from looking outside the chroot. Everything works except for
> (2) above. The check for the local copy always fails forcing a new clone into
> ${srcdir} instead of simply being able to update the local tree and copy to
> ${srcdir}.
>
>
> ## GIT repository variables and location
> _gitlocal="/home/david/tde/tde/main"
> _gitname="${pkgname#*-}"
> _gitdir="${_gitlocal}/dependencies/${_gitname}"
> _giturl="$url"
> _gitsfx="-git"
>
> _prefix="/opt/tde"
>
> build() {
>
>  cd ${srcdir}
> <snip>
>
>  ## update or clone from GIT
>  msg "Checking for existing GIT source: $_gitname"
>  if [ -d $_gitname ] ; then
>    msg "Using existing source in: ${srcdir}/${_gitname}"
>  else
>    msg "Looking for local GIT tree: $_gitdir"
>    if [ -d $_gitdir ] ; then
>      msg "Updating local tree: $_gitdir"
>      cd $_gitdir && {
>        git pull
>        git submodule init
>        git submodule update --recursive
>        git submodule foreach --recursive "git checkout master"
>        git submodule foreach --recursive "git pull"
>      }
>      cd ${srcdir} && cp -a "$_gitdir" .
>      msg "The local files are updated."
>    else
>      msg "Connecting to GIT server...."
>      msg "Cloning new source from: $url"
>      git clone --depth 1 $_giturl
>    fi
>    msg "GIT checkout done or server timeout"
>  fi
>
>  msg "Starting configure..."
> #   ./configure \
>
>  msg "Building - ${pkgname}..."
>
> #   make
>
> }
>
>  The output from makechrootpkg is always the same even though the local copy of
> the git tree is present:
>
> ==> Making package: tde-libart-lgpl 1.3.2.4-1 (Wed Feb 29 23:55:20 UTC 2012)
> ==> Checking runtime dependencies...
> ==> Checking buildtime dependencies...
> ==> Retrieving Sources...
> ==> Extracting Sources...
> ==> Starting build()...
> ==> Checking for existing GIT source: libart-lgpl
> ==> Looking for local GIT tree: /home/david/tde/tde/main/dependencies/libart-lgpl
> ==> Connecting to GIT server....
> ==> Cloning new source from: http://scm.trinitydesktop.org/scm/git/libart-lgpl
> Cloning into 'libart-lgpl'...
> ==> GIT checkout done or server timeout
> ==> Starting configure...
> ==> Building - tde-libart-lgpl...
> ==> Entering fakeroot environment...
> ==> Starting package()...
> ==> Packaging - tde-libart-lgpl-1.3.2.4
>
>  Possible? Or would the solution be to set the local copy of the git tree up
> inside a apache (or whatever it takes) and pretend to run a local copy? Even
> then, there would be no way to check for its existence from inside the chroot?
>

You could mount --bind the location of your local git repositories to
a point inside your chroot, that's probably the quickest and simplest
way of doing it, although it offers no protection of your git
repositories from being wiped out from within the chroot.

Regards,
Damien


More information about the arch-general mailing list