avoid using the makefile when bootstrapping with --spin
This commit is contained in:
parent
dc03e317b4
commit
e26c232d15
15
Makefile
15
Makefile
|
@ -1,18 +1,12 @@
|
||||||
CABAL?=cabal
|
CABAL?=cabal
|
||||||
|
|
||||||
DEBDEPS=gnupg ghc cabal-install libghc-missingh-dev libghc-ansi-terminal-dev libghc-ifelse-dev libghc-unix-compat-dev libghc-hslogger-dev libghc-network-dev libghc-quickcheck2-dev libghc-mtl-dev libghc-monadcatchio-transformers-dev
|
# this target is provided (and is first) to keep old versions of the
|
||||||
|
# propellor cron job working, and will eventually be removed
|
||||||
# this target is provided to keep old versions of the propellor cron job
|
run: build
|
||||||
# working, and will eventually be removed
|
|
||||||
run: deps build
|
|
||||||
./propellor
|
./propellor
|
||||||
|
|
||||||
dev: build tags
|
dev: build tags
|
||||||
|
|
||||||
deps:
|
|
||||||
@if [ $$(whoami) = root ]; then apt-get --no-upgrade --no-install-recommends -y install $(DEBDEPS) || (apt-get update && apt-get --no-upgrade --no-install-recommends -y install $(DEBDEPS)); fi || true
|
|
||||||
@if [ $$(whoami) = root ]; then apt-get --no-upgrade --no-install-recommends -y install libghc-async-dev || (cabal update; cabal install async); fi || true
|
|
||||||
|
|
||||||
install: propellor.1
|
install: propellor.1
|
||||||
install -d $(DESTDIR)/usr/bin $(DESTDIR)/usr/src/propellor
|
install -d $(DESTDIR)/usr/bin $(DESTDIR)/usr/src/propellor
|
||||||
install -s dist/build/propellor/propellor $(DESTDIR)/usr/bin/propellor
|
install -s dist/build/propellor/propellor $(DESTDIR)/usr/bin/propellor
|
||||||
|
@ -50,7 +44,8 @@ hackage:
|
||||||
.PHONY: tags
|
.PHONY: tags
|
||||||
|
|
||||||
# The rules below are only used when bootstrapping new propellor
|
# The rules below are only used when bootstrapping new propellor
|
||||||
# installations; propellor contains equivilant haksell code.
|
# installations and building packages; propellor contains equivilant
|
||||||
|
# haskell code that it uses to re-build itself.
|
||||||
|
|
||||||
build: dist/setup-config
|
build: dist/setup-config
|
||||||
@if ! $(CABAL) build; then $(CABAL) configure; $(CABAL) build; fi
|
@if ! $(CABAL) build; then $(CABAL) configure; $(CABAL) build; fi
|
||||||
|
|
|
@ -4,7 +4,8 @@ propellor (2.2.0) UNRELEASED; urgency=medium
|
||||||
improve process name visible in ps.
|
improve process name visible in ps.
|
||||||
* Add shebang to cron.daily etc files.
|
* Add shebang to cron.daily etc files.
|
||||||
* Some changes to tor configuration, minor API change.
|
* Some changes to tor configuration, minor API change.
|
||||||
* Propellor now builds itself without needing the Makefile.
|
* Propellor now builds itself, and gets its build dependencies installed
|
||||||
|
when deploying to a new host, without needing the Makefile.
|
||||||
|
|
||||||
-- Joey Hess <id@joeyh.name> Mon, 16 Feb 2015 19:00:48 -0400
|
-- Joey Hess <id@joeyh.name> Mon, 16 Feb 2015 19:00:48 -0400
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,62 @@
|
||||||
module Propellor.Bootstrap (
|
module Propellor.Bootstrap (
|
||||||
buildPropellor
|
bootstrapPropellorCommand,
|
||||||
|
installGitCommand,
|
||||||
|
buildPropellor,
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Propellor
|
import Propellor
|
||||||
import Utility.SafeCommand
|
import Utility.SafeCommand
|
||||||
|
|
||||||
import System.Posix.Files
|
import System.Posix.Files
|
||||||
|
import Data.List
|
||||||
|
|
||||||
|
type ShellCommand = String
|
||||||
|
|
||||||
|
-- Shell command line to build propellor, used when bootstrapping on a new
|
||||||
|
-- host. Should be run inside the propellor source tree, and will install
|
||||||
|
-- all necessary build dependencies.
|
||||||
|
bootstrapPropellorCommand :: ShellCommand
|
||||||
|
bootstrapPropellorCommand = "if ! test -x ./propellor; then " ++ go ++ "; fi"
|
||||||
|
where
|
||||||
|
go = intercalate " && "
|
||||||
|
[ depsCommand
|
||||||
|
, buildCommand
|
||||||
|
]
|
||||||
|
|
||||||
|
buildCommand :: ShellCommand
|
||||||
|
buildCommand = intercalate " && "
|
||||||
|
[ "cabal configure"
|
||||||
|
, "cabal build"
|
||||||
|
, "ln -sf dist/build/propellor-config/propellor-config propellor"
|
||||||
|
]
|
||||||
|
|
||||||
|
depsCommand :: ShellCommand
|
||||||
|
depsCommand = "(" ++ aptinstall debdeps ++ " || (apt-get update && " ++ aptinstall debdeps ++ ")) || true;"
|
||||||
|
++ "(" ++ aptinstall ["libghc-async-dev"] ++ " || (cabal update; cabal install async)) || true"
|
||||||
|
where
|
||||||
|
aptinstall ps = "apt-get --no-upgrade --no-install-recommends -y install " ++ unwords ps
|
||||||
|
|
||||||
|
-- This is the same build deps listed in debian/control.
|
||||||
|
debdeps =
|
||||||
|
[ "gnupg"
|
||||||
|
, "ghc"
|
||||||
|
, "cabal-install"
|
||||||
|
-- async is not available in debian stable
|
||||||
|
-- , "libghc-async-dev"
|
||||||
|
, "libghc-missingh-dev"
|
||||||
|
, "libghc-hslogger-dev"
|
||||||
|
, "libghc-unix-compat-dev"
|
||||||
|
, "libghc-ansi-terminal-dev"
|
||||||
|
, "libghc-ifelse-dev"
|
||||||
|
, "libghc-network-dev"
|
||||||
|
, "libghc-quickcheck2-dev"
|
||||||
|
, "libghc-mtl-dev"
|
||||||
|
, "libghc-monadcatchio-transformers-dev"
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
installGitCommand :: ShellCommand
|
||||||
|
installGitCommand = "if ! git --version >/dev/null; then apt-get update && apt-get --no-install-recommends --no-upgrade -y install git; fi"
|
||||||
|
|
||||||
buildPropellor :: IO ()
|
buildPropellor :: IO ()
|
||||||
buildPropellor = unlessM (actionMessage "Propellor build" build) $
|
buildPropellor = unlessM (actionMessage "Propellor build" build) $
|
||||||
|
|
|
@ -24,6 +24,7 @@ import Propellor.PrivData.Paths
|
||||||
import Propellor.Git
|
import Propellor.Git
|
||||||
import Propellor.Ssh
|
import Propellor.Ssh
|
||||||
import Propellor.Gpg
|
import Propellor.Gpg
|
||||||
|
import Propellor.Bootstrap
|
||||||
import Propellor.Types.CmdLine
|
import Propellor.Types.CmdLine
|
||||||
import qualified Propellor.Shim as Shim
|
import qualified Propellor.Shim as Shim
|
||||||
import Utility.FileMode
|
import Utility.FileMode
|
||||||
|
@ -69,7 +70,7 @@ spin target relay hst = do
|
||||||
probecmd = intercalate " ; "
|
probecmd = intercalate " ; "
|
||||||
[ "if [ ! -d " ++ localdir ++ "/.git ]"
|
[ "if [ ! -d " ++ localdir ++ "/.git ]"
|
||||||
, "then (" ++ intercalate " && "
|
, "then (" ++ intercalate " && "
|
||||||
[ "if ! git --version || ! make --version; then apt-get update && apt-get --no-install-recommends --no-upgrade -y install git make; fi"
|
[ installGitCommand
|
||||||
, "echo " ++ toMarked statusMarker (show NeedGitClone)
|
, "echo " ++ toMarked statusMarker (show NeedGitClone)
|
||||||
] ++ ") || echo " ++ toMarked statusMarker (show NeedPrecompiled)
|
] ++ ") || echo " ++ toMarked statusMarker (show NeedPrecompiled)
|
||||||
, "else " ++ updatecmd
|
, "else " ++ updatecmd
|
||||||
|
@ -78,7 +79,7 @@ spin target relay hst = do
|
||||||
|
|
||||||
updatecmd = intercalate " && "
|
updatecmd = intercalate " && "
|
||||||
[ "cd " ++ localdir
|
[ "cd " ++ localdir
|
||||||
, "if ! test -x ./propellor; then make deps build; fi"
|
, bootstrapPropellorCommand
|
||||||
, if viarelay
|
, if viarelay
|
||||||
then "./propellor --continue " ++
|
then "./propellor --continue " ++
|
||||||
shellEscape (show (Relay target))
|
shellEscape (show (Relay target))
|
||||||
|
|
Loading…
Reference in New Issue