09be84beee
A virtual machine isn't very useful if there are no means to access it; let's bring up the basic networking and provide root SSH access via pre-existing public key. As the remote access with known default credentials is roughly equivalent to just lending one's VMs to anyone with network access to it, the fallback root password is now exterminated; you have to provide one (or a long enough random string if you plan to use keys only, see e.g. apg utility).
141 lines
3.4 KiB
Makefile
141 lines
3.4 KiB
Makefile
# step 3: copy the needed features to $(BUILDDIR)
|
|
# (only regarding the needed subprofiles)
|
|
|
|
ifndef BUILDDIR
|
|
|
|
help/plus all: banner
|
|
@$(call grepper,'^+')
|
|
|
|
help/features: banner
|
|
@$(call grepper,'^use/')
|
|
|
|
banner:
|
|
@echo "** BUILDDIR not defined; available features:"
|
|
|
|
grepper = $(and $(1),$(grepper_body))
|
|
define grepper_body
|
|
@for dir in */; do \
|
|
out="`grep -h $(1) $$dir/config.mk \
|
|
| cut -f1 -d: \
|
|
| tr ' ' '\n\n' \
|
|
| grep $(1) \
|
|
| tr '\n' ' ' \
|
|
| sort -u`"; \
|
|
[ -z "$$out" ] || echo "$$dir: $$out"; \
|
|
done
|
|
endef
|
|
|
|
%:
|
|
$(error BUILDDIR not defined)
|
|
|
|
else
|
|
|
|
export BUILDDIR
|
|
|
|
include $(BUILDDIR)/distcfg.mk
|
|
|
|
# first rsync what's static, and make backups (*~) --
|
|
# these might signal of file clashes (or plain dirt);
|
|
# second, care for toplevel and tagged script dirs;
|
|
# then handle two more ways of implementing a feature
|
|
#
|
|
# NB: some subprofiles will be specified as "src/dst"
|
|
# -- then both src/ and dst/ can hold the addons;
|
|
# still both pieces go into a single destination
|
|
|
|
### sorry for somewhat complicated and overly long lines
|
|
|
|
TARGETS := prep $(FEATURES) finalize
|
|
|
|
.PHONY: $(TARGETS)
|
|
all: | $(TARGETS)
|
|
|
|
prep:
|
|
@echo "** starting feature configuration"
|
|
@if [ -n "$(GLOBAL_DEBUG)" ]; then \
|
|
echo "** target subprofiles: $(SUBPROFILES)"; \
|
|
echo "** requested features: $(FEATURES)"; \
|
|
fi
|
|
|
|
# feat
|
|
$(FEATURES):
|
|
@feat=$@; \
|
|
if [ -n "$(GLOBAL_DEBUG)" ]; then \
|
|
echo "** adding $$feat feature"; \
|
|
fi; \
|
|
pushd "$$feat" >/dev/null && \
|
|
for sub in / $(SUBPROFILES); do \
|
|
dirtags=; \
|
|
if [ "$$sub" = / ]; then \
|
|
srcdirs="."; \
|
|
dst="."; \
|
|
else \
|
|
src="$${sub%/*}"; \
|
|
dst="$${sub#*/}"; \
|
|
srcdirs=; \
|
|
if [ -d "$$src" ]; then \
|
|
srcdirs="$$src"; \
|
|
dirtags="&& $$src"; \
|
|
fi; \
|
|
if [ -d "$$dst" -a "$$dst" != "$$src" ]; then \
|
|
srcdirs="$$srcdirs $$dst"; \
|
|
dirtags="&& ($$src || $$dst)"; \
|
|
fi; \
|
|
for srcdir in $$srcdirs; do \
|
|
rsync -qab --exclude tagged \
|
|
"$$srcdir/" "$(BUILDDIR)/$$dst/"; \
|
|
done; \
|
|
fi; \
|
|
if [ -n "$(GLOBAL_DEBUG)" ]; then \
|
|
echo "** src=[$$src] dst=[$$dst] srcdirs=[$$srcdirs]"; \
|
|
fi; \
|
|
for srcdir in $$srcdirs; do \
|
|
[ -d "$$srcdir" ] || continue; \
|
|
pushd "$$srcdir" >&/dev/null; \
|
|
for part in lib {image-,}scripts.d; do \
|
|
destdir="$(BUILDDIR)/$$dst/$$part"; \
|
|
[ -d "$$destdir" ] || continue; \
|
|
if [ "$$sub" = / -a -d "$$part" ]; then \
|
|
rsync -qab "$$part/" "$$destdir/"; \
|
|
fi; \
|
|
[ -d "tagged/$$part" ] || continue; \
|
|
[ "$$srcdir" != "." ] || continue; \
|
|
pushd "tagged/$$part" >/dev/null; \
|
|
echo "$$feat $$dirtags" \
|
|
| tags2lists . \
|
|
| xargs -r cp -vpLt "$$destdir" --; \
|
|
popd >/dev/null; \
|
|
done; \
|
|
popd >&/dev/null; \
|
|
done; \
|
|
if type -t git >&/dev/null && \
|
|
pushd "$(BUILDDIR)/$$dst/" >/dev/null; then \
|
|
test -n "`git status -s`" && \
|
|
git add . && \
|
|
if [ -n "$$dst" ]; then \
|
|
the="$$sub subprofile"; \
|
|
else \
|
|
the="toplevel"; \
|
|
fi && \
|
|
git commit -qam "$$feat feature: $$the part added"; \
|
|
popd >/dev/null; \
|
|
fi; \
|
|
done; \
|
|
if [ -x "generate.sh" ]; then sh generate.sh; fi; \
|
|
if [ -s "generate.mk" ]; then $(MAKE) -f generate.mk; fi; \
|
|
if type -t git >&/dev/null && \
|
|
pushd "$(BUILDDIR)/" >/dev/null; then \
|
|
if [ -n "`git status -s`" ]; then \
|
|
git add . && \
|
|
git commit -qam "$$feat feature generation complete"; \
|
|
fi; \
|
|
popd >/dev/null; \
|
|
fi; \
|
|
popd >/dev/null
|
|
|
|
finalize:
|
|
@find "$(BUILDDIR)/" -name '*~' \
|
|
| sed "s,$(BUILDDIR)/,** warning: file clash: ," >&2
|
|
|
|
endif
|