* [gentoo-dev] usr merge
@ 2016-04-05 1:19 99% William Hubbs
0 siblings, 0 replies; 1+ results
From: William Hubbs @ 2016-04-05 1:19 UTC (permalink / raw
To: gentoo development; +Cc: aballier
[-- Attachment #1.1: Type: text/plain, Size: 1178 bytes --]
All,
I thought that since the usr merge is coming up again, and since I lost
track of the message where it was brought up, I would open a
new thread to discuss it.
When it came up before, some were saying that the /usr merge violates
the fhs. I don't remember the specifics of what the claim was at the
time, (I'm sure someone will point it out if it is still a concern).
I don't think creating usr merged stages would be that difficult. I
think it would just be a matter of creating a new version of baselayout
that puts these symlinks in place:
/bin->usr/bin
/lib->usr/lib
/lib32->usr/lib32
/lib64->usr/lib64
/sbin->usr/bin
/usr/sbin->bin
Once that is in place in a new baselayout, I think portage's colission
detection would be able to catch files that had the same names and were
originally in different paths when building the new stages.
I put some thought also in how to nigrate live systems, and I'm not sure
what the best way to do that is. I wrote a script, which would do it in
theory, but I haven't tested because I only have one system and if
it breaks it the only way back would be to reinstall.
The script is attached.
Thoughts on any of this?
William
[-- Attachment #1.2: usrmerge --]
[-- Type: text/plain, Size: 1232 bytes --]
#!/bin/bb
is_internal()
{
[ -z "$1" ] && return 1
case $(command -v $1) in
*/*) rc=1 ;;
*) rc=0 ;;
esac
return $rc
}
run_command()
{
local dryrun=
[ $DRYRUN -eq 1 ] && dryrun=echo
$dryrun "$@"
}
for cmd in cp ln; do
if ! is_internal $cmd; then
echo "Please rebuild busybox and include the $cmd command."
exit 1
fi
done
if [ -L /bin -a -L /sbin ]; then
echo "It appears that the /usr merge has already been done on this system."
exit 0
fi
DRYRUN=1
HELP=0
while [ $# -gt 0 ]; do
case $1 in
--dryrun|--dry-run) DRYRUN=1 ;;
-h|--help) HELP=1 ;;
esac
shift
done
if [ $HELP -eq 1 ]; then
echo "$(basename $0) -h \| --help - displays this message"
echo "$(basename $0) --dryrun \| --dry-run - show what would be done"
exit 0
fi
# copy binaries
for dir in /bin /sbin /usr/sbin; do
run_command cp -a $dir/* /usr/bin
done
# copy libraries
for dir in /lib*; do
[ -L $dir ] && continue
run_command cp -a $dir/* /usr$dir
done
# Create the /usr merge compatibility symlinks
for dir in /bin /sbin; do
run_command rm -rf $dir
run_command ln -s usr/bin $dir
done
run_command rm -rf /usr/sbin
run_command ln -s bin /usr/sbin
for dir in /lib*; do
run_command rm -rf $dir
run_command ln -s usr$dir $dir
done
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]
^ permalink raw reply [relevance 99%]
Results 1-1 of 1 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2016-04-05 1:19 99% [gentoo-dev] usr merge William Hubbs
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox