LINUX.ORG.RU

mc перестал входить в tar.*

 , utar


1

2

Раньше входил без проблем, не пойму в чем причина. Относится ко всем tar.* и t(bz2|gz и т.д.)

На примере tar.bz2, вот так из сабшелла без проблем:

cd file.tar.bz2/utar://

В /etc/mc/mc.ext.ini:

[tar.bzip2]
Regex=\.t(ar\.bz2|bz2?|b2)$
Open=%cd %p/utar://
View=%view{ascii} /usr/lib/mc/ext.d/archive.sh view tar.bzip2

Чтобы избежать влияния пользовательских настроек временно переместил ~/.config/mc, ~/.local/share/mc и удалил ~/.cache/mc, но увы…

Когда все началось сказать сложно, но заметил только сегодня. Может после обновления до 4.8.30, может раньше.

PS. Что-то я сомневаюсь, что я не открывал архивы с 15 августа:

$ grep -E '\s(mc|tar)\s' /var/log/pacman.log
[2023-07-27T06:14:27+0300] [ALPM] upgraded tar (1.34-2 -> 1.35-1)
[2023-08-15T20:36:48+0300] [ALPM] upgraded mc (4.8.29-2 -> 4.8.30-1)

Попробовал даунгрейдиться до 4.8.29-2, ситуация такая же.
Что за дела?

★★★★

Ответ на: комментарий от dmitry237

Под strace вот что видно в момент попытки открытия:

strace: Process 90180 attached
pselect6(7, [3 6], NULL, NULL, NULL, NULL) = 1 (in [3])
rt_sigaction(SIGINT, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f8f3f503b70}, NULL, 8) = 0
pselect6(7, [3 6], NULL, NULL, NULL, NULL) = 1 (in [3])
pselect6(4, [3], NULL, NULL, {tv_sec=10, tv_nsec=0}, NULL) = 1 (in [3], left {tv_sec=9, tv_nsec=999999100})
read(3, "\r", 1)                        = 1
ioctl(0, TIOCLINUX, 0x7ffc8fc50537)     = -1 ENOTTY (Inappropriate ioctl for device)
newfstatat(AT_FDCWD, "/tmp/sqld-v0.16.3-linux-x86_64.tar.gz", {st_mode=S_IFREG|0644, st_size=14487015, ...}, 0) = 0
pipe2([12, 13], O_CLOEXEC)              = 0
prlimit64(0, RLIMIT_NOFILE, NULL, {rlim_cur=1024, rlim_max=1024*1024}) = 0
prlimit64(0, RLIMIT_NOFILE, NULL, {rlim_cur=1024, rlim_max=1024*1024}) = 0
mmap(NULL, 36864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f8f3f2e5000
rt_sigprocmask(SIG_BLOCK, ~[], [], 8)   = 0
clone3({flags=CLONE_VM|CLONE_VFORK, exit_signal=SIGCHLD, stack=0x7f8f3f2e5000, stack_size=0x9000}, 88) = 91406
munmap(0x7f8f3f2e5000, 36864)           = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
close(13)                               = 0
fcntl(12, F_SETFD, 0)                   = 0
newfstatat(12, "", {st_mode=S_IFIFO|0600, st_size=0, ...}, AT_EMPTY_PATH) = 0
read(12, "POSIX tar archive (GNU) (gzip compressed data, from Unix)\n", 4096) = 58
close(12)                               = 0
wait4(91406, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 91406
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=91406, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
wait4(90182, 0x7ffc8fc4f5e0, WNOHANG|WSTOPPED, NULL) = 0
wait4(90181, 0x7ffc8fc4f5e4, WNOHANG|WSTOPPED, NULL) = -1 ECHILD (No child processes)
rt_sigreturn({mask=[]})                 = 91406
pselect6(5, [4], NULL, NULL, {tv_sec=0, tv_nsec=0}, NULL) = 0 (Timeout)
pselect6(4, [3], NULL, NULL, {tv_sec=0, tv_nsec=0}, NULL) = 0 (Timeout)
pselect6(4, [3], NULL, NULL, {tv_sec=0, tv_nsec=0}, NULL) = 0 (Timeout)
pselect6(5, [4], NULL, NULL, {tv_sec=0, tv_nsec=0}, NULL) = 0 (Timeout)
pselect6(5, [4], NULL, NULL, {tv_sec=0, tv_nsec=0}, NULL) = 0 (Timeout)
rt_sigaction(SIGINT, {sa_handler=0x563f22ed3250, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f8f3f503b70}, NULL, 8) = 0
pselect6(7, [3 6], NULL, NULL, NULL, NULL^Cstrace: Process 90180 detached
 <detached ...>

Может ему тип архива перестал подходить? (POSIX tar archive (GNU) (gzip compressed data, from Unix))

Ja-Ja-Hey-Ho ★★★★★
()
Ответ на: комментарий от Ja-Ja-Hey-Ho

Да, попробовал двойные слеши и это работает:

[tar.bzip2]
Regex=\\.t(ar\\.bz2|bz2?|b2)$
Open=%cd %p/utar://
View=%view{ascii} /usr/lib/mc/ext.d/archive.sh view tar.bzip2

Наверное потом придется s/\\\\/\\/

dmitry237 ★★★★
() автор топика
Ответ на: комментарий от utanho

В зип архивы мс входит, а в тар не может. Пока не разбирался в чем дело, нет времени.

Та же самая засада с glib2!
zip определяется в ini-файле через Shell=.zip - это продолжает работать, а сломались все определения через Regex=\.(tar\.bz2|tbz2)$. И сломалось экранирование спец-символов - возвращает ошибку в новой версии glib2.
Временно, вместо \. нужно писать \\. Но эту фичу откатили в исходниках - при очередном обновлении станет как-раньше.

sigurd ★★★★★
()
Последнее исправление: sigurd (всего исправлений: 2)