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