upgrade glibc - problem z rpm (hardlinki)

Jakub Bogusz qboosh w prioris.mini.pw.edu.pl
Nie, 7 Paź 2001, 15:38:22 CEST


Przy upgrade libc zaobserwowałem spory problem w rpm (właściwie to
chyba z cpio) - z hardlinkami oznaczonymi %lang().

Istotne jest, że mam w /etc/rpm/macros %_install_langs pl_PL
Zaczęło się tak:

#v+
[root root]# rpm -Uhv ~comp/rpm/RPMS/glibc-2.2.4-4.i686.rpm
Preparing...                ########################################### [100%]
   1:glibc                  error: unpacking of archive failed on file /usr/lib/locale/bs_BA/LC_CTYPE: cpio: link failed - No such file or directory
#v-

Błąd wystąpił w okolicach 52%, na dysku była część nowego glibca.
Po obejrzeniu co się dzieje przy użyciu strace[1] zrobiłem:

#v+
[root root]# mkdir /usr/lib/locale/bs_BA
[root root]# rpm -Uhv ~comp/rpm/RPMS/glibc-2.2.4-4.i686.rpm
Preparing...                ########################################### [100%]
   1:glibc                  error: unpacking of archive failed on file /usr/lib/locale/cs_CZ/LC_CTYPE: cpio: link failed - No such file or directory
#v-

hm... próbuję dalej:

#v+
[root root]# mkdir /usr/lib/locale/cs_CZ
[root root]# rpm -Uhv ~comp/rpm/RPMS/glibc-2.2.4-4.i686.rpm
Preparing...                ########################################### [100%]
   1:glibc                  error: unpacking of archive failed on file /usr/lib/locale/hr_HR/LC_CTYPE: cpio: link failed - No such file or directory
[root root]# mkdir /usr/lib/locale/hr_HR
[root root]# rpm -Uhv ~comp/rpm/RPMS/glibc-2.2.4-4.i686.rpm
Preparing...                ########################################### [100%]
   1:glibc                  error: unpacking of archive failed on file /usr/lib/locale/hu_HU/LC_CTYPE: cpio: link failed - No such file or directory
[root root]# mkdir /usr/lib/locale/hu_HU
[root root]# rpm -Uhv ~comp/rpm/RPMS/glibc-2.2.4-4.i686.rpm
Preparing...                ########################################### [100%]
   1:glibc                  error: unpacking of archive failed on file /usr/lib/locale/sk_SK/LC_CTYPE: cpio: link failed - No such file or directory
[root root]# mkdir /usr/lib/locale/sk_SK
[root root]# rpm -Uhv ~comp/rpm/RPMS/glibc-2.2.4-4.i686.rpm
Preparing...                ########################################### [100%]
   1:glibc                  error: unpacking of archive failed on file /usr/lib/locale/ro_RO/LC_ADDRESS: cpio: link failed - No such file or directory
[root root]# mkdir /usr/lib/locale/ro_RO
[root root]# rpm -Uhv ~comp/rpm/RPMS/glibc-2.2.4-4.i686.rpm
Preparing...                ########################################### [100%]
   1:glibc                  ########################################### [100%]
#v-

Oprócz katalogów które sam zrobiłem miałem jeszcze niechciane sl_SI
i sr_YU:

#v+
[root root]# ls -l /usr/lib/locale
total 9
drwxr-xr-x    2 root     root         1024 paź  7 14:11 bs_BA
drwxr-xr-x    2 root     root         1024 paź  7 14:11 cs_CZ
drwxr-xr-x    2 root     root         1024 paź  7 14:11 hr_HR
drwxr-xr-x    2 root     root         1024 paź  7 14:11 hu_HU
drwxr-xr-x    3 root     root         1024 paź  7 14:11 pl_PL
drwxr-xr-x    2 root     root         1024 paź  7 14:11 ro_RO
drwxr-xr-x    2 root     root         1024 paź  7 14:11 sk_SK
drwxr-xr-x    2 root     root         1024 paź  7 14:11 sl_SI
drwxr-xr-x    2 root     root         1024 paź  7 14:11 sr_YU
#v-

Polskie locale się zainstalowały...:

#v+
[root root]# ls -l /usr/lib/locale/pl_PL/
total 207
-rw-r--r--    8 root     root          132 paź  7 13:23 LC_ADDRESS
-rw-r--r--    1 root     root        23091 paź  7 13:29 LC_COLLATE
-rw-r--r--    7 root     root       173396 paź  7 13:23 LC_CTYPE
-rw-r--r--    1 root     root          338 paź  7 13:29 LC_IDENTIFICATION
-rw-r--r--    9 root     root           28 paź  7 13:23 LC_MEASUREMENT
drwxr-xr-x    2 root     root         1024 paź  7 14:11 LC_MESSAGES
-rw-r--r--    1 root     root          295 paź  7 13:29 LC_MONETARY
-rw-r--r--    8 root     root           67 paź  7 13:23 LC_NAME
-rw-r--r--    6 root     root           59 paź  7 13:23 LC_NUMERIC
-rw-r--r--    9 root     root           39 paź  7 13:23 LC_PAPER
-rw-r--r--    1 root     root           54 paź  7 13:29 LC_TELEPHONE
-rw-r--r--    1 root     root         2448 paź  7 13:29 LC_TIME
#v-

...jak widać ze wszystkimi hardlinkami do tych plików - właśnie
w podkatalogach z innymi lokalami.
Po skasowaniu wszystkich niechcianych katalogów rpm -V glibc marudzi, że
ich nie ma.


[1] fragmenty loga ze stace:

[najpierw normalne instalowanie polskich locale - ale bez co najmniej LC_CTYPE]
[...]
[a tego już nie zamawiałem:]
531   lstat64("/usr", {st_mode=S_IFDIR|0755, st_size=1024, ...}) = 0
531   lstat64("/usr/lib", {st_mode=S_IFDIR|0755, st_size=20480, ...}) = 0
531   lstat64("/usr/lib/locale", {st_mode=S_IFDIR|0755, st_size=1024, ...}) = 0
531   lstat64("/usr/lib/locale/sl_SI", {st_mode=S_IFDIR|0755, st_size=1024, ...}) = 0
531   lstat64("/usr/lib/locale/sl_SI/LC_CTYPE", {st_mode=S_IFREG|0644, st_size=173396, ...}) = 0
531   rename("/usr/lib/locale/sl_SI/LC_CTYPE", "/usr/lib/locale/sl_SI/LC_CTYPE-RPMDELETE") = 0
531   unlink("/usr/lib/locale/sl_SI/LC_CTYPE-RPMDELETE") = 0
531   open("/usr/lib/locale/sl_SI/LC_CTYPE", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 13
[...]
[nagrywanie pliku]
[...]
[tego też nie zamawiałem - i na końcu błąd klasy fatal:]
531   chown32("/usr/lib/locale/sl_SI/LC_CTYPE", 0, 0) = 0
531   chmod("/usr/lib/locale/sl_SI/LC_CTYPE", 0644) = 0
531   utime("/usr/lib/locale/sl_SI/LC_CTYPE", [2001/10/07-13:23:33, 2001/10/07-13:23:33]) = 0
531   lstat64("/usr/lib/locale/bs_BA/LC_CTYPE", 0xbffe2acc) = -1 ENOENT (No such file or directory)
531   link("/usr/lib/locale/sl_SI/LC_CTYPE", "/usr/lib/locale/bs_BA/LC_CTYPE") = -1 ENOENT (No such
file or directory)
[...]
[dalej już tylko wykonywanie czegoś w rodzaju abort]



No i co z tym można zrobić?
Najlepiej by było poprawić rpm - tylko to wygląda na większą robotę...


-- 
Jakub Bogusz
http://prioris.mini.pw.edu.pl/~qboosh/



Więcej informacji o liście dyskusyjnej pld-devel-pl