junest
junest copied to clipboard
File rename lossage.
Try to rename a file in junest:
$ junest -- bash
/home/me/.junest/opt/junest/lib/core/common.sh: line 95: /usr/bin/getent: Permission denied
/home/me/.junest/opt/junest/lib/core/common.sh: line 95: /usr/bin/getent: Permission denied
/home/me/.junest/opt/junest/lib/core/common.sh: line 95: /usr/bin/getent: Permission denied
$ cd /etc/tor
$ ls
torrc torrc-dist
$ mv torrc torrc.orig
$ ls -l
total 24
-rw-r--r-- 1 me me 8648 Jun 7 17:08 torrc
-rw-r--r-- 1 me me 11099 Jun 7 17:08 torrc-dist
$ mv torrc torrc.orig
/usr/bin/mv: cannot move 'torrc' to 'torrc.orig': No such file or directory
$ exit
Back in the host system:
$ ls -l .junest/etc/tor
total 24
-rw-r--r-- 1 me me 8648 Jun 7 17:08 torrc
-rw-r--r-- 1 me me 11099 Jun 7 17:08 torrc-dist
$ mv .junest/etc/tor/torrc .junest/etc/tor/torrc.orig
$ ls -l .junest/etc/tor
total 24
-rw-r--r-- 1 me me 11099 Jun 7 17:08 torrc-dist
-rw-r--r-- 1 me me 8648 Jun 7 17:08 torrc.orig
You got some error with getent
too which is weird. You might have permission issues there. Can you try junest -f
?
junest -f
gives me the same problem with getent
.
$ junest -f
/home/user/.junest/opt/junest/lib/core/common.sh: /home/user/.junest/bin/getent: /usr/lib/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory
/home/user/.junest/opt/junest/lib/core/common.sh: /home/user/.junest/bin/getent: /usr/lib/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory
/home/user/.junest/opt/junest/lib/core/common.sh: /home/user.junest/bin/getent: /usr/lib/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory
It is true that the file /usr/lib/ld-linux-x86-64.so.2
does not exist. I'm on CentOS and I think that was just updated (to 7):
$ cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)
I do not have the file rename problem with junest -f
, but junest
is now giving me a new problem, with bash:
$ junest -- bash
/home/user/.junest/opt/junest/lib/core/common.sh: /home/user/.junest/bin/getent: /usr/lib/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory
/home/user/.junest/opt/junest/lib/core/common.sh: /home/user/.junest/bin/getent: /usr/lib/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory
/home/user/.junest/opt/junest/lib/core/common.sh: /home/user/.junest/bin/getent: /usr/lib/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory
bash: /usr/bin/bash: cannot execute binary file
And after running that, I am not in junest, so I can no longer try to recreate the problem with mv
. I am able to run bash
from my non-junest bash shell.
If I just run junest
rather than junest -- bash
, then the problem does not appear.
I have the same problem and my workaround is to just downgrade coreutils to 8.29. If you don't have it in your pacman cache, this is how I built it:
PKGBUILD
# Maintainer: Sébastien "Seblu" Luttringer
# Contributor: Bartłomiej Piotrowski <[email protected]>
# Contributor: Allan McRae <[email protected]>
# Contributor: judd <[email protected]>
pkgname=coreutils
pkgver=8.29
pkgrel=1
pkgdesc='The basic file, shell and text manipulation utilities of the GNU operating system'
arch=('x86_64')
license=('GPL3')
url='https://www.gnu.org/software/coreutils/'
groups=('base')
depends=('glibc' 'acl' 'attr' 'gmp' 'libcap' 'openssl')
source=("https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz"{,.sig}
freadseek.patch)
validpgpkeys=('6C37DC12121A5006BC1DB804DF6FD971306037D9') # Pádraig Brady
md5sums=('960cfe75a42c9907c71439f8eb436303'
'SKIP'
'8bd9aac3e992be0f8196df5368a73279')
prepare() {
cd $pkgname-$pkgver
# apply patch from the source array (should be a pacman feature)
local filename
for filename in "${source[@]}"; do
if [[ "$filename" =~ \.patch$ ]]; then
msg2 "Applying patch ${filename##*/}"
patch -p1 -N -i "$srcdir/${filename##*/}"
fi
done
:
}
build() {
cd $pkgname-$pkgver
./configure \
--prefix=/usr \
--libexecdir=/usr/lib \
--with-openssl \
--enable-no-install-program=groups,hostname,kill,uptime
make
}
check() {
cd $pkgname-$pkgver
#make check
}
package() {
cd $pkgname-$pkgver
make DESTDIR="$pkgdir" install
}
# vim:set ts=2 sw=2 et:
freadseek.patch
From 1831628c0630ae96a43586b2a25ca51cbdba3e53 Mon Sep 17 00:00:00 2001
From: Paul Eggert <address@hidden>
Date: Mon, 5 Mar 2018 10:56:29 -0800
Subject: [PATCH] fflush: adjust to glibc 2.28 libio.h removal
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Problem reported by Daniel P. Berrangé in:
https://lists.gnu.org/r/bug-gnulib/2018-03/msg00000.html
* lib/fbufmode.c (fbufmode):
* lib/fflush.c (clear_ungetc_buffer_preserving_position)
(disable_seek_optimization, rpl_fflush):
* lib/fpending.c (__fpending):
* lib/fpurge.c (fpurge):
* lib/freadable.c (freadable):
* lib/freadahead.c (freadahead):
* lib/freading.c (freading):
* lib/freadptr.c (freadptr):
* lib/freadseek.c (freadptrinc):
* lib/fseeko.c (fseeko):
* lib/fseterr.c (fseterr):
* lib/fwritable.c (fwritable):
* lib/fwriting.c (fwriting):
Check _IO_EOF_SEEN instead of _IO_ftrylockfile.
* lib/stdio-impl.h (_IO_IN_BACKUP) [_IO_EOF_SEEN]:
Define if not already defined.
---
ChangeLog | 23 +++++++++++++++++++++++
lib/fbufmode.c | 2 +-
lib/fflush.c | 6 +++---
lib/fpending.c | 2 +-
lib/fpurge.c | 2 +-
lib/freadable.c | 2 +-
lib/freadahead.c | 2 +-
lib/freading.c | 2 +-
lib/freadptr.c | 2 +-
lib/freadseek.c | 2 +-
lib/fseeko.c | 4 ++--
lib/fseterr.c | 2 +-
lib/fwritable.c | 2 +-
lib/fwriting.c | 2 +-
lib/stdio-impl.h | 6 ++++++
15 files changed, 45 insertions(+), 16 deletions(-)
diff --git a/lib/fflush.c b/lib/fflush.c
index 983ade0ff..a6edfa105 100644
--- a/lib/fflush.c
+++ b/lib/fflush.c
@@ -33,7 +33,7 @@
#undef fflush
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
/* Clear the stream's ungetc buffer, preserving the value of ftello (fp). */
static void
@@ -72,7 +72,7 @@ clear_ungetc_buffer (FILE *fp)
#endif
-#if ! (defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */)
+#if ! (defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */)
# if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT
/* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
@@ -148,7 +148,7 @@ rpl_fflush (FILE *stream)
if (stream == NULL || ! freading (stream))
return fflush (stream);
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
clear_ungetc_buffer_preserving_position (stream);
diff --git a/lib/fpending.c b/lib/fpending.c
index c84e3a5b4..789f50e4e 100644
--- a/lib/fpending.c
+++ b/lib/fpending.c
@@ -32,7 +32,7 @@ __fpending (FILE *fp)
/* Most systems provide FILE as a struct and the necessary bitmask in
<stdio.h>, because they need it for implementing getc() and putc() as
fast macros. */
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
return fp->_IO_write_ptr - fp->_IO_write_base;
#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
/* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
diff --git a/lib/fpurge.c b/lib/fpurge.c
index b1d417c7a..3aedcc373 100644
--- a/lib/fpurge.c
+++ b/lib/fpurge.c
@@ -62,7 +62,7 @@ fpurge (FILE *fp)
/* Most systems provide FILE as a struct and the necessary bitmask in
<stdio.h>, because they need it for implementing getc() and putc() as
fast macros. */
-# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
fp->_IO_read_end = fp->_IO_read_ptr;
fp->_IO_write_ptr = fp->_IO_write_base;
/* Avoid memory leak when there is an active ungetc buffer. */
diff --git a/lib/freadahead.c b/lib/freadahead.c
index c2ecb5b28..23ec76ee5 100644
--- a/lib/freadahead.c
+++ b/lib/freadahead.c
@@ -30,7 +30,7 @@ extern size_t __sreadahead (FILE *);
size_t
freadahead (FILE *fp)
{
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
if (fp->_IO_write_ptr > fp->_IO_write_base)
return 0;
return (fp->_IO_read_end - fp->_IO_read_ptr)
diff --git a/lib/freading.c b/lib/freading.c
index 73c28acdd..c24d0c88a 100644
--- a/lib/freading.c
+++ b/lib/freading.c
@@ -31,7 +31,7 @@ freading (FILE *fp)
/* Most systems provide FILE as a struct and the necessary bitmask in
<stdio.h>, because they need it for implementing getc() and putc() as
fast macros. */
-# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
return ((fp->_flags & _IO_NO_WRITES) != 0
|| ((fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) == 0
&& fp->_IO_read_base != NULL));
diff --git a/lib/freadptr.c b/lib/freadptr.c
index 5aeadf3da..ffb801039 100644
--- a/lib/freadptr.c
+++ b/lib/freadptr.c
@@ -29,7 +29,7 @@ freadptr (FILE *fp, size_t *sizep)
size_t size;
/* Keep this code in sync with freadahead! */
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
if (fp->_IO_write_ptr > fp->_IO_write_base)
return NULL;
size = fp->_IO_read_end - fp->_IO_read_ptr;
diff --git a/lib/freadseek.c b/lib/freadseek.c
index e7b0c7bdb..5fd2dd7ca 100644
--- a/lib/freadseek.c
+++ b/lib/freadseek.c
@@ -36,7 +36,7 @@ freadptrinc (FILE *fp, size_t increment)
/* Keep this code in sync with freadptr! */
#if HAVE___FREADPTRINC /* musl libc */
__freadptrinc (fp, increment);
-#elif defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+#elif defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
fp->_IO_read_ptr += increment;
#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
/* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
diff --git a/lib/fseeko.c b/lib/fseeko.c
index 0101ab55f..193f4e8ce 100644
--- a/lib/fseeko.c
+++ b/lib/fseeko.c
@@ -47,7 +47,7 @@ fseeko (FILE *fp, off_t offset, int whence)
#endif
/* These tests are based on fpurge.c. */
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
if (fp->_IO_read_end == fp->_IO_read_ptr
&& fp->_IO_write_ptr == fp->_IO_write_base
&& fp->_IO_save_base == NULL)
@@ -123,7 +123,7 @@ fseeko (FILE *fp, off_t offset, int whence)
return -1;
}
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
fp->_flags &= ~_IO_EOF_SEEN;
fp->_offset = pos;
#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
diff --git a/lib/fseterr.c b/lib/fseterr.c
index 82649c3ac..adb637256 100644
--- a/lib/fseterr.c
+++ b/lib/fseterr.c
@@ -29,7 +29,7 @@ fseterr (FILE *fp)
/* Most systems provide FILE as a struct and the necessary bitmask in
<stdio.h>, because they need it for implementing getc() and putc() as
fast macros. */
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
fp->_flags |= _IO_ERR_SEEN;
#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
/* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
diff --git a/lib/stdio-impl.h b/lib/stdio-impl.h
index 78d896e9f..05c5752a2 100644
--- a/lib/stdio-impl.h
+++ b/lib/stdio-impl.h
@@ -18,6 +18,12 @@
the same implementation of stdio extension API, except that some fields
have different naming conventions, or their access requires some casts. */
+/* Glibc 2.28 made _IO_IN_BACKUP private. For now, work around this
+ problem by defining it ourselves. FIXME: Do not rely on glibc
+ internals. */
+#if !defined _IO_IN_BACKUP && defined _IO_EOF_SEEN
+# define _IO_IN_BACKUP 0x100
+#endif
/* BSD stdio derived implementations. */
--
2.14.3
Then run makepkg --skippgpcheck
. However, makepkg itself will try to use mv
, which breaks the package build. To break out of the loop I wrote this bash script to emulate mv:
mv
#!/usr/bin/env bash
if [ "$#" -gt "2" ]
then
opts=$1
shift
elif [ "$#" -lt "2" ]
then
echo "received $# parameters, expected 2: $@"
exit 1
fi
tmppath="/tmp/clemclem/mv/$(basename "$1")"
cp -r "$1" "$tmppath"
rm -rf "$1"
cp -r $opts "$tmppath" "$2"
rm -rf "$tmppath"
It temporarily copies files into /tmp/clemclem/mv (make sure the temporary path exists or the script will fail) leveraging the fact that cp
works, then copies them back using the new name. It's not perfect but it did the job for me in building coreutils. Make sure you update your PATH correctly so that the fake mv overrides the system one. Bash alias doesn't seem to work for me.
After the build is complete you should get a packaged coreutils. Downgrade the installed package with pacman -U <your_freshly_built_coreutils.tar.xz> and mv should now work. This is a workaround and I wonder if it's not somehow related to issue #219.