Re: [ptxdist] [RFC] Colons in filenames
On Wed, Feb 10, 2016 at 06:23:47PM +0100, Michael Olbrich wrote: > I think the most readable would be replace the escaping: > > '\:' -> 0x1 > ':' -> 0x2 > 0x1 -> ':' > > and then use 0x2 as separator. > > Well there is also DOPERMISSIONS in rules/post/ptxd_make_image_common.make > which ist mostly but not exactly the same. But I suppose we could merge > that. It will require some testing and careful review. This stuff is rather > tricky. > And then there is scripts/lib/ptxd_make_image_fix_permissions.sh... I used ASCII 31 (unit separator), after all this is whole purpose of its sole existence. So what about something like following patch? diff --git a/rules/post/image_cpio.make b/rules/post/image_cpio.make index 573faee..200b283 100644 --- a/rules/post/image_cpio.make +++ b/rules/post/image_cpio.make @@ -15,7 +15,7 @@ $(IMAGEDIR)/root.cpio: $(STATEDIR)/image_working_dir @echo -n "Creating '$(notdir $(@))' from working dir..." @cd $(image/work_dir) && \ ( \ - awk -F: $(DOPERMISSIONS) $(image/permissions) && \ + awk $(DOPERMISSIONS) $(image/permissions) && \ echo "find . | cpio --quiet -H newc -o > '$(@)'" \ ) | $(FAKEROOT) -- @echo "done." diff --git a/rules/post/image_ext2.make b/rules/post/image_ext2.make index 3e3423b..0dbcafd 100644 --- a/rules/post/image_ext2.make +++ b/rules/post/image_ext2.make @@ -15,7 +15,7 @@ ifdef PTXCONF_IMAGE_EXT2 $(IMAGEDIR)/root.ext2: $(STATEDIR)/image_working_dir @echo -n "Creating root.ext2 from working dir..." @cd $(image/work_dir); \ - (awk -F: $(DOPERMISSIONS) $(image/permissions) && \ + (awk $(DOPERMISSIONS) $(image/permissions) && \ ( \ echo -n "$(PTXCONF_SYSROOT_HOST)/bin/genext2fs "; \ echo -n "-b $(PTXCONF_IMAGE_EXT2_SIZE) "; \ diff --git a/rules/post/image_jffs2.make b/rules/post/image_jffs2.make index 5e448f5..7f12883 100644 --- a/rules/post/image_jffs2.make +++ b/rules/post/image_jffs2.make @@ -17,7 +17,7 @@ $(IMAGEDIR)/root.jffs2: $(STATEDIR)/image_working_dir $(STATEDIR)/host-mtd-utils @echo -n "(--eraseblock=$(PTXCONF_IMAGE_JFFS2_BLOCKSIZE) " @echo "$(call remove_quotes,$(PTXCONF_IMAGE_JFFS2_EXTRA_ARGS)))" @cd $(image/work_dir); \ - (awk -F: $(DOPERMISSIONS) $(image/permissions) && \ + (awk $(DOPERMISSIONS) $(image/permissions) && \ ( \ echo -n "$(PTXCONF_SYSROOT_HOST)/sbin/mkfs.jffs2 "; \ echo -n "-d $(image/work_dir) ";\ diff --git a/rules/post/image_squashfs.make b/rules/post/image_squashfs.make index 6d02255..69dc721 100644 --- a/rules/post/image_squashfs.make +++ b/rules/post/image_squashfs.make @@ -19,7 +19,7 @@ ifdef PTXCONF_IMAGE_SQUASHFS $(IMAGEDIR)/root.squashfs: $(STATEDIR)/image_working_dir $(STATEDIR)/host-squashfs-tools.install.post @echo -n "Creating root.squashfs from working dir..." @cd $(image/work_dir); \ - (awk -F: $(DOPERMISSIONS) $(image/permissions) && \ + (awk $(DOPERMISSIONS) $(image/permissions) && \ ( \ echo -n "$(PTXCONF_SYSROOT_HOST)/sbin/mksquashfs "; \ echo -n "$(image/work_dir) "; \ diff --git a/rules/post/image_tgz.make b/rules/post/image_tgz.make index 57f69f4..a8e129a 100644 --- a/rules/post/image_tgz.make +++ b/rules/post/image_tgz.make @@ -19,7 +19,7 @@ endif $(IMAGEDIR)/root.tgz: $(STATEDIR)/image_working_dir @echo -n 'Creating root.tgz from working dir$(if $(IMAGE_TGZ_LABEL), with label "$(IMAGE_TGZ_LABEL)",)... ' @cd $(image/work_dir); \ - (awk -F: $(DOPERMISSIONS) $(image/permissions) && \ + (awk -F\x1F $(DOPERMISSIONS) $(image/permissions) &&\ ( echo -n "tar ${IMAGE_TGZ_LABEL_ARGS} -zcf ";\ echo -n "$@ ." )\ ) | $(FAKEROOT) -- diff --git a/rules/post/image_ubi.make b/rules/post/image_ubi.make index edfae1d..17321dc 100644 --- a/rules/post/image_ubi.make +++ b/rules/post/image_ubi.make @@ -22,7 +22,7 @@ $(IMAGEDIR)/root.ubifs: $(STATEDIR)/image_working_dir $(STATEDIR)/host-mtd-utils @echo -n "-e $(PTXCONF_IMAGE_UBIFS_LEB_SIZE) -c $(PTXCONF_IMAGE_UBIFS_ROOT_MAX_LEB_COUNT) " @echo -n "$(PTXCONF_IMAGE_UBIFS_EXTRA_ARGS))" @cd $(image/work_dir); \ - (awk -F: $
Re: [ptxdist] [RFC] Colons in filenames
On Wed, Feb 03, 2016 at 11:05:02PM +0100, Ladislav Michl wrote: > On Fri, Jan 22, 2016 at 09:06:36AM +0100, Michael Olbrich wrote: > > On Fri, Jan 22, 2016 at 01:31:37AM +0100, Ladislav Michl wrote: > > > Now I'm going to be honest. Previous patch 'Add usb-modeswitch-data > > > package' > > > break things - 'ptxdist images' fails as ':' is used as delimiter in > > > perms file. > > > Patch bellow escapes semicolon on producer side, anyone cares about > > > consumer? > > > > This does not work well with IFS in bash and FS in awk. but I think we can > > switch different character. Maybe a vertical tab? > > Well, I did not give up 'escaping idea' yet. What about something like this? > (awk part could be done better) I think the most readable would be replace the escaping: '\:' -> 0x1 ':' -> 0x2 0x1 -> ':' and then use 0x2 as separator. Well there is also DOPERMISSIONS in rules/post/ptxd_make_image_common.make which ist mostly but not exactly the same. But I suppose we could merge that. It will require some testing and careful review. This stuff is rather tricky. And then there is scripts/lib/ptxd_make_image_fix_permissions.sh... Michael > diff --git a/scripts/lib/ptxd_lib_dopermissions.awk > b/scripts/lib/ptxd_lib_dopermissions.awk > index 336948c..17ee1b6 100755 > --- a/scripts/lib/ptxd_lib_dopermissions.awk > +++ b/scripts/lib/ptxd_lib_dopermissions.awk > @@ -5,13 +5,29 @@ BEGIN { > } > > $1 ~ "f" { > - printf("chmod %s'.%s' &&\n" \ > -"chown %s.%s '.%s' &&\n", \ > -$5, $2, $3, $4, $2); > + path = $2; > + for (i = 3; i <= NF; i++) { > + if (substr(path, length(path), 1) == "\\") > + path = substr(path, 1, length(path) - 1) ":" $i; > + else { > + printf("chmod %s'.%s' &&\n" \ > +"chown %s.%s '.%s' &&\n", \ > +$(i+2), path, $i, $(i+1), path); > + break; > + } > + } > } > > $1 ~ "n" { > - printf("mknod -m %s '.%s' %s %s %s &&\n" \ > -"chown %s.%s '.%s' &&\n", \ > -$5, $2, $6, $7, $8, $3, $4, $2); > + path = $2; > + for (i = 3; i <= NF; i++) { > + if (substr(path, length(path), 1) == "\\") > + path = substr(path, 1, length(path) - 1) ":" $i; > + else { > + printf("mknod -m %s '.%s' %s %s %s &&\n" \ > +"chown %s.%s '.%s' &&\n", \ > +$(i+2), path, $(i+3), $(i+4), $(i+5), $i, > $(i+1), path); > + break; > + } > + } > } > diff --git a/scripts/lib/ptxd_make_xpkg_pkg.sh > b/scripts/lib/ptxd_make_xpkg_pkg.sh > index 5ba404e..01ce361 100644 > --- a/scripts/lib/ptxd_make_xpkg_pkg.sh > +++ b/scripts/lib/ptxd_make_xpkg_pkg.sh > @@ -210,7 +210,7 @@ install directory: > install -m "${mod_nfs}" -d "${ndirs[@]/%/${dir}}" && > install -m "${mod}" -o "${usr}" -g "${grp}" -d "${pdirs[@]/%/${dir}}" && > > -echo "f:${dir}:${usr}:${grp}:${mod}" >> "${pkg_xpkg_perms}" || > +echo "f:${dir//:/\\:}:${usr}:${grp}:${mod}" >> "${pkg_xpkg_perms}" || > ptxd_install_error "install_dir failed!" > } > export -f ptxd_install_dir > @@ -343,7 +343,7 @@ Usually, just remove the 6th parameter and everything > works fine. > # now change to requested user and group > chown "${usr}:${grp}" "${pdirs[@]/%/${dst}}" && > > -echo "f:${dst}:${usr}:${grp}:${mod}" >> "${pkg_xpkg_perms}" > +echo "f:${dst//:/\\:}:${usr}:${grp}:${mod}" >> "${pkg_xpkg_perms}" > } > export -f ptxd_install_file_impl > > @@ -414,7 +414,7 @@ install device node: > done && > chown "${usr}:${grp}" "${pdirs[@]/%/${dst}}" && > > -echo "n:${dst}:${usr}:${grp}:${mod}:${type}:${major}:${minor}" >> > "${pkg_xpkg_perms}" > +echo "n:${dst//:/\\:}:${usr}:${grp}:${mod}:${type}:${major}:${minor}" >> > "${pkg_xpkg_perms}" > } > export -f ptxd_install_mknod > > > ___ > ptxdist mailing list > ptxdist@pengutronix.de -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0| Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917- | ___ ptxdist mailing list ptxdist@pengutronix.de
[ptxdist] [RFC] Colons in filenames
On Fri, Jan 22, 2016 at 09:06:36AM +0100, Michael Olbrich wrote: > On Fri, Jan 22, 2016 at 01:31:37AM +0100, Ladislav Michl wrote: > > Now I'm going to be honest. Previous patch 'Add usb-modeswitch-data package' > > break things - 'ptxdist images' fails as ':' is used as delimiter in perms > > file. > > Patch bellow escapes semicolon on producer side, anyone cares about > > consumer? > > This does not work well with IFS in bash and FS in awk. but I think we can > switch different character. Maybe a vertical tab? Well, I did not give up 'escaping idea' yet. What about something like this? (awk part could be done better) diff --git a/scripts/lib/ptxd_lib_dopermissions.awk b/scripts/lib/ptxd_lib_dopermissions.awk index 336948c..17ee1b6 100755 --- a/scripts/lib/ptxd_lib_dopermissions.awk +++ b/scripts/lib/ptxd_lib_dopermissions.awk @@ -5,13 +5,29 @@ BEGIN { } $1 ~ "f" { - printf("chmod %s'.%s' &&\n" \ - "chown %s.%s '.%s' &&\n", \ - $5, $2, $3, $4, $2); + path = $2; + for (i = 3; i <= NF; i++) { + if (substr(path, length(path), 1) == "\\") + path = substr(path, 1, length(path) - 1) ":" $i; + else { + printf("chmod %s'.%s' &&\n" \ + "chown %s.%s '.%s' &&\n", \ + $(i+2), path, $i, $(i+1), path); + break; + } + } } $1 ~ "n" { - printf("mknod -m %s '.%s' %s %s %s &&\n" \ - "chown %s.%s '.%s' &&\n", \ - $5, $2, $6, $7, $8, $3, $4, $2); + path = $2; + for (i = 3; i <= NF; i++) { + if (substr(path, length(path), 1) == "\\") + path = substr(path, 1, length(path) - 1) ":" $i; + else { + printf("mknod -m %s '.%s' %s %s %s &&\n" \ + "chown %s.%s '.%s' &&\n", \ + $(i+2), path, $(i+3), $(i+4), $(i+5), $i, $(i+1), path); + break; + } + } } diff --git a/scripts/lib/ptxd_make_xpkg_pkg.sh b/scripts/lib/ptxd_make_xpkg_pkg.sh index 5ba404e..01ce361 100644 --- a/scripts/lib/ptxd_make_xpkg_pkg.sh +++ b/scripts/lib/ptxd_make_xpkg_pkg.sh @@ -210,7 +210,7 @@ install directory: install -m "${mod_nfs}" -d "${ndirs[@]/%/${dir}}" && install -m "${mod}" -o "${usr}" -g "${grp}" -d "${pdirs[@]/%/${dir}}" && -echo "f:${dir}:${usr}:${grp}:${mod}" >> "${pkg_xpkg_perms}" || +echo "f:${dir//:/\\:}:${usr}:${grp}:${mod}" >> "${pkg_xpkg_perms}" || ptxd_install_error "install_dir failed!" } export -f ptxd_install_dir @@ -343,7 +343,7 @@ Usually, just remove the 6th parameter and everything works fine. # now change to requested user and group chown "${usr}:${grp}" "${pdirs[@]/%/${dst}}" && -echo "f:${dst}:${usr}:${grp}:${mod}" >> "${pkg_xpkg_perms}" +echo "f:${dst//:/\\:}:${usr}:${grp}:${mod}" >> "${pkg_xpkg_perms}" } export -f ptxd_install_file_impl @@ -414,7 +414,7 @@ install device node: done && chown "${usr}:${grp}" "${pdirs[@]/%/${dst}}" && -echo "n:${dst}:${usr}:${grp}:${mod}:${type}:${major}:${minor}" >> "${pkg_xpkg_perms}" +echo "n:${dst//:/\\:}:${usr}:${grp}:${mod}:${type}:${major}:${minor}" >> "${pkg_xpkg_perms}" } export -f ptxd_install_mknod ___ ptxdist mailing list ptxdist@pengutronix.de