Emmet and myself had quite a deep conversation on enabling morph to
build backwards compatible architectures on a given system.
The current use-case in point is building an armv7l system on an armv8l
Our conclusion the best way to handle this is to add knowledge to
_validate_architecture (buildcommand.py:124) about which architectures
are backwards compatible to others, starting with that armv8 is
backwards compatible to armv7.
We also discussed the case of armv6, which is relevant for )the
hypothetical case of) building for Raspberry Pi. This is a more complex
situation, to summarise:
* armv8 is backwards compatible, apart from 
* Deprecated Instructions
* Obsolete Instructions
* SWP, SWPB
* VFP short vectors
* CP15 barrier
and SETEND is specifically disallowed by Linux armv8 support.
There is one specific case of SETEND usage I can find, which is a string
optimisation library that is part of raspbian - arm-mem 
It seems very recent kernels include emulation for most of the obsolete
instructions (I can identify SWP support in 3.17), however anything
using SETEND and IT will be trouble.
As a potential solution to this, we postulated two armv6 architectures
lets call 'armv6' and 'armv6_8'. 'armv6_8' would be the safe subset of
armv6 to build/run on armv8. 'armv6' would allow all instructions. Then,
for example, a system using arm-mem would only be included in
definitions for 'armv6l', and it would be clearly wrong to use in
definitions for 'armv6_8'.
Pedro Alvarez (6):
Add 'is_device' function to check if we are deploying to a device
Add force flag to 'mkfs.btrfs'
Disable loop mount, leave the system decide
Move DISK_SIZE detection inside create_raw_disk_image
Don't create the rawdisk image inside of create_local_system
Don't create rawdisk image if deploying to a device
morphlib/exts/kvm.write | 1 +
morphlib/exts/openstack.write | 1 +
morphlib/exts/rawdisk.write | 7 ++++++-
morphlib/exts/virtualbox-ssh.write | 1 +
morphlib/writeexts.py | 20 ++++++++++++--------
5 files changed, 21 insertions(+), 9 deletions(-)
This re-write runs all of the system-version-manager commands on
the target cluster via ssh, so in addition to self-upgrades,
cycle.sh can now be used to upgrade a target device (eg a devboard)
while working in Baserock VM or chroot
diff --git a/scripts/cycle.sh b/scripts/cycle.sh
index c0e2aa6..ca6983e 100755
@@ -14,6 +14,8 @@
# with this program; if not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
echo "Usage: cycle.sh some-system some-cluster [newversion]"
@@ -38,24 +40,27 @@ if [ ! -z "$3" ] ; then
-if system-version-manager get-running | grep -q "^$newversion$"; then
- echo "You are currently running the $newversion system."
+location=`cat $2 | grep location | sed 's/ \+//g' | cut -d":" -f2`
+svm="ssh $location system-version-manager"
+if [ $runningversion = $newversion ]; then
+ echo "$newversion is currently running at $location"
echo "Maybe you want to boot into a different system version?"
-system-version-manager set-default $runningversion
-if system-version-manager list | grep -q "^$newversion$"; then
- system-version-manager remove $newversion
+$svm "set-default $runningversion"
+if $svm "list" | grep -q "^$newversion$"; then
+ $svm "remove $newversion"
+echo $(date +%Y-%m-%d\ %T) "Cyclng $location from $runningversion to
morph build "$1"
sed -i "s|^- morph: .*$|- morph: $1|" "$2"
-morph deploy --upgrade "$2" self.HOSTNAME=$(hostname)
+host=`ssh $location hostname`
+morph deploy --upgrade "$2" self.HOSTNAME=$host
It's very useful to be able to simply download a hard float rootfs to use for
testing (e.g for board bring-up), so add a system (just a devel system without
a bsp) to the release.morph to ensure there's one available to download
James Thomas (2):
Add a rootfs only armv7lhf system
Add rootfs to release
clusters/release.morph | 5 ++++
systems/devel-system-armv7lhf-rootfs.morph | 38 ++++++++++++++++++++++++++++++
2 files changed, 43 insertions(+)
create mode 100644 systems/devel-system-armv7lhf-rootfs.morph