diff --git a/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs b/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs index f4e1314..149c8e6 100644 --- a/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs +++ b/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs @@ -9,8 +9,14 @@ import Propellor.Property.Cron (CronTimes) builduser :: UserName builduser = "builder" +homedir :: FilePath +homedir = "/home/builder" + +gitbuilderdir :: FilePath +gitbuilderdir = homedir "gitbuilder" + builddir :: FilePath -builddir = "gitbuilder" +builddir = gitbuilderdir "build" builder :: Architecture -> CronTimes -> Bool -> Property builder arch crontimes rsyncupload = combineProperties "gitannexbuilder" @@ -20,26 +26,22 @@ builder arch crontimes rsyncupload = combineProperties "gitannexbuilder" "liblockfile-simple-perl", "cabal-install", "vim", "less"] , serviceRunning "cron" `requires` Apt.installed ["cron"] , User.accountFor builduser - , check (lacksdir builddir) $ userScriptProperty builduser - [ "git clone git://git.kitenet.net/gitannexbuilder " ++ builddir - , "cd " ++ builddir + , check (not <$> doesDirectoryExist gitbuilderdir) $ userScriptProperty builduser + [ "git clone git://git.kitenet.net/gitannexbuilder " ++ gitbuilderdir + , "cd " ++ gitbuilderdir , "git checkout " ++ arch ] `describe` "gitbuilder setup" - , check (lacksdir $ builddir "build") $ userScriptProperty builduser - [ "cd " ++ builddir - , "git clone git://git-annex.branchable.com/ build" + , check (not <$> doesDirectoryExist builddir) $ userScriptProperty builduser + [ "git clone git://git-annex.branchable.com/ " ++ builddir ] - , Property "git-annex source build deps installed" $ do - d <- homedir - ensureProperty $ Apt.buildDepIn (d builddir "build") - , Cron.niceJob "gitannexbuilder" crontimes builduser ("~/" ++ builddir) "git pull ; ./autobuild" + , "git-annex source build deps installed" ==> Apt.buildDepIn builddir + , Cron.niceJob "gitannexbuilder" crontimes builduser gitbuilderdir "git pull ; ./autobuild" -- The builduser account does not have a password set, -- instead use the password privdata to hold the rsync server -- password used to upload the built image. , Property "rsync password" $ do - d <- homedir - let f = d "rsyncpassword" + let f = homedir "rsyncpassword" if rsyncupload then withPrivData (Password builduser) $ \p -> do oldp <- catchDefaultIO "" $ readFileStrict f @@ -52,8 +54,3 @@ builder arch crontimes rsyncupload = combineProperties "gitannexbuilder" , makeChange $ writeFile f "no password configured" ) ] - where - homedir = fromMaybe ("/home/" ++ builduser) <$> User.homedir builduser - lacksdir d = do - h <- homedir - not <$> doesDirectoryExist (h d) diff --git a/config-joey.hs b/config-joey.hs index 0bc948b..f2cc5e7 100644 --- a/config-joey.hs +++ b/config-joey.hs @@ -45,7 +45,8 @@ host hostname@"orca.kitenet.net" = standardSystem Unstable $ props & Apt.buildDep ["git-annex"] & Docker.docked container hostname "amd64-git-annex-builder" & Docker.docked container hostname "i386-git-annex-builder" - -- ! Docker.docked container hostname "armel-git-annex-builder" + & Docker.docked container hostname "armel-git-annex-builder-companion" + & Docker.docked container hostname "armel-git-annex-builder" & Docker.garbageCollected -- My laptop host _hostname@"darkstar.kitenet.net" = Just $ props @@ -67,11 +68,29 @@ container _host name & serviceRunning "apache2" `requires` Apt.installed ["apache2"] ] + + -- armel builder has a companion container that run amd64 and + -- runs the build first to get TH splices. They share a home + -- directory, and need to have the same versions of all haskell + -- libraries installed. + | name == "armel-git-annex-builder-companion" = Just $ Docker.containerFrom + (image $ System (Debian Unstable) "amd64") + [ Docker.volume GitAnnexBuilder.homedir + ] + | name == "armel-git-annex-builder" = Just $ Docker.containerFrom + (image $ System (Debian Unstable) "armel") + [ Docker.link (name ++ "-companion") "companion" + , Docker.volumes_from (name ++ "-companion") + , Docker.inside $ props +-- & GitAnnexBuilder.builder "armel" "15 * * * *" True + ] + | "-git-annex-builder" `isSuffixOf` name = let arch = takeWhile (/= '-') name in Just $ Docker.containerFrom (image $ System (Debian Unstable) arch) [ Docker.inside $ props & GitAnnexBuilder.builder arch "15 * * * *" True ] + | otherwise = Nothing -- | Docker images I prefer to use.