diff options
Diffstat (limited to 'recipes-core/busybox/busybox_1.21.1.bbappend')
-rw-r--r-- | recipes-core/busybox/busybox_1.21.1.bbappend | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/recipes-core/busybox/busybox_1.21.1.bbappend b/recipes-core/busybox/busybox_1.21.1.bbappend new file mode 100644 index 0000000..b4935b2 --- /dev/null +++ b/recipes-core/busybox/busybox_1.21.1.bbappend | |||
@@ -0,0 +1,87 @@ | |||
1 | PR .= ".1" | ||
2 | |||
3 | FILES_${PN} += "${libdir}/${PN}" | ||
4 | |||
5 | # We should use sh wrappers instead of links so the commands could get correct | ||
6 | # security labels | ||
7 | python create_sh_wrapper_reset_alternative_vars () { | ||
8 | # We need to load the full set of busybox provides from the /etc/busybox.links | ||
9 | # Use this to see the update-alternatives with the right information | ||
10 | |||
11 | dvar = d.getVar('D', True) | ||
12 | pn = d.getVar('PN', True) | ||
13 | |||
14 | def create_sh_alternative_vars(links, target, mode): | ||
15 | import shutil | ||
16 | # Create sh wrapper template | ||
17 | fwp = open("busybox_wrapper", 'w') | ||
18 | fwp.write("#!%s" % (target)) | ||
19 | os.fchmod(fwp.fileno(), mode) | ||
20 | fwp.close() | ||
21 | # Install the sh wrappers and alternatives reset to link to them | ||
22 | wpdir = os.path.join(d.getVar('libdir', True), pn) | ||
23 | wpdir_dest = '%s%s' % (dvar, wpdir) | ||
24 | if not os.path.exists(wpdir_dest): | ||
25 | os.makedirs(wpdir_dest) | ||
26 | f = open('%s%s' % (dvar, links), 'r') | ||
27 | for alt_link_name in f: | ||
28 | alt_link_name = alt_link_name.strip() | ||
29 | alt_name = os.path.basename(alt_link_name) | ||
30 | # Copy script wrapper to wp_path | ||
31 | alt_wppath = '%s%s' % (wpdir, alt_link_name) | ||
32 | alt_wppath_dest = '%s%s' % (wpdir_dest, alt_link_name) | ||
33 | alt_wpdir_dest = os.path.dirname(alt_wppath_dest) | ||
34 | if not os.path.exists(alt_wpdir_dest): | ||
35 | os.makedirs(alt_wpdir_dest) | ||
36 | shutil.copy2("busybox_wrapper", alt_wppath_dest) | ||
37 | # Re-set alternatives | ||
38 | # Match coreutils | ||
39 | if alt_name == '[': | ||
40 | alt_name = 'lbracket' | ||
41 | d.appendVar('ALTERNATIVE_%s' % (pn), ' ' + alt_name) | ||
42 | d.setVarFlag('ALTERNATIVE_LINK_NAME', alt_name, alt_link_name) | ||
43 | if os.path.exists(alt_wppath_dest): | ||
44 | d.setVarFlag('ALTERNATIVE_TARGET', alt_name, alt_wppath) | ||
45 | f.close() | ||
46 | |||
47 | os.remove("busybox_wrapper") | ||
48 | return | ||
49 | |||
50 | if os.path.exists('%s/etc/busybox.links' % (dvar)): | ||
51 | create_sh_alternative_vars("/etc/busybox.links", "/bin/busybox", 0o0755) | ||
52 | else: | ||
53 | create_sh_alternative_vars("/etc/busybox.links.nosuid", "/bin/busybox.nosuid", 0o0755) | ||
54 | create_sh_alternative_vars("/etc/busybox.links.suid", "/bin/busybox.suid", 0o4755) | ||
55 | } | ||
56 | |||
57 | # Add to PACKAGEBUILDPKGD so it could override the alternatives, which are set in | ||
58 | # do_package_prepend() section of busybox_*.bb. | ||
59 | PACKAGEBUILDPKGD_prepend = "create_sh_wrapper_reset_alternative_vars " | ||
60 | |||
61 | # Use sh wrappers instead of links | ||
62 | pkg_postinst_${PN} () { | ||
63 | # This part of code is dedicated to the on target upgrade problem. | ||
64 | # It's known that if we don't make appropriate symlinks before update-alternatives calls, | ||
65 | # there will be errors indicating missing commands such as 'sed'. | ||
66 | # These symlinks will later be updated by update-alternatives calls. | ||
67 | test -n 2 > /dev/null || alias test='busybox test' | ||
68 | if test "x$D" = "x"; then | ||
69 | # Remove busybox.nosuid if it's a symlink, because this situation indicates | ||
70 | # that we're installing or upgrading to a one-binary busybox. | ||
71 | if test -h /bin/busybox.nosuid; then | ||
72 | rm -f /bin/busybox.nosuid | ||
73 | fi | ||
74 | for suffix in "" ".nosuid" ".suid"; do | ||
75 | if test -e /etc/busybox.links$suffix; then | ||
76 | while read link; do | ||
77 | if test ! -e "$link"; then | ||
78 | # we can use busybox here because even if we are using splitted busybox | ||
79 | # we've made a symlink from /bin/busybox to /bin/busybox.nosuid. | ||
80 | busybox echo "#!/bin/busybox$suffix" > $link | ||
81 | fi | ||
82 | done < /etc/busybox.links$suffix | ||
83 | fi | ||
84 | done | ||
85 | fi | ||
86 | } | ||
87 | |||