Re: [ptxdist] [RFC] Colons in filenames

2016-07-13 Thread Ladislav Michl
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

2016-02-10 Thread Michael Olbrich
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

2016-02-03 Thread Ladislav Michl
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