
He publicado esto enpregunta.fedora.orgya que todavía no estoy seguro de si este o el otro lado tiene la base de usuarios de Fedora más grande.
Desde hace unos días no puedo instalar actualizaciones debido a este error:
# env LC_ALL=C dnf update
Last metadata expiration check: 0:18:57 ago on Wed Jan 23 16:16:14 2019.
Traceback (most recent call last):
File "/usr/bin/dnf", line 58, in <module>
main.user_main(sys.argv[1:], exit_code=True)
File "/usr/lib/python3.7/site-packages/dnf/cli/main.py", line 179, in user_main
errcode = main(args)
File "/usr/lib/python3.7/site-packages/dnf/cli/main.py", line 64, in main
return _main(base, args, cli_class, option_parser_class)
File "/usr/lib/python3.7/site-packages/dnf/cli/main.py", line 99, in _main
return cli_run(cli, base)
File "/usr/lib/python3.7/site-packages/dnf/cli/main.py", line 123, in cli_run
ret = resolving(cli, base)
File "/usr/lib/python3.7/site-packages/dnf/cli/main.py", line 146, in resolving
base.resolve(cli.demands.allow_erasing)
File "/usr/lib/python3.7/site-packages/dnf/base.py", line 760, in resolve
self._transaction = self._goal2transaction(goal)
File "/usr/lib/python3.7/site-packages/dnf/base.py", line 681, in _goal2transaction
ts.add_upgrade(pkg, upgraded, obs)
File "/usr/lib/python3.7/site-packages/dnf/db/group.py", line 269, in add_upgrade
ti_new = self.new(new, libdnf.transaction.TransactionItemAction_UPGRADE)
File "/usr/lib/python3.7/site-packages/dnf/db/group.py", line 222, in new
reason = self.get_reason(pkg)
File "/usr/lib/python3.7/site-packages/dnf/db/group.py", line 237, in get_reason
return self.history.swdb.resolveRPMTransactionItemReason(pkg.name, pkg.arch, -1)
File "/usr/lib64/python3.7/site-packages/libdnf/transaction.py", line 788, in resolveRPMTransactionItemReason
return _transaction.Swdb_resolveRPMTransactionItemReason(self, name, arch, maxTransactionId)
RuntimeError: Step: database disk image is malformed in
SELECT
ti.action as action,
ti.reason as reason
FROM
trans_item ti
JOIN
trans t ON ti.trans_id = t.id
JOIN
rpm i USING (item_id)
WHERE
t.state = 1
/* see comment in TransactionItem.hpp - TransactionItemAction */
AND ti.action not in (3, 5, 7, 10)
AND i.name = 'python2-rpkg'
AND i.arch = 'noarch'
ORDER BY
ti.trans_id DESC
LIMIT 1
Descubrí que uno debe ejecutar estos comandos para solucionarlo y lo intenté, pero no resolvió el problema.
dnf clean all
dnf makecache
rpm --buildddb
EnPregúntale a Fedora, alguien sugirióque dnf no puede recuperarse de eso y que hay que reparar la base de datos SQLite manualmente.
Intenté ejecutar el comando dado,
sqlite3 history-<date>.sqlite ".dump" | sqlite3 history-<new date>.db && rm history-<date>.sqlite
Hacerlo /var/lib/dnf/history/history-2015-10-25.sqlite
no tuvo ningún efecto. Al hacerlo /var/lib/dnf/history.sqlite
resultó en un nuevo error:
# dnf update
Letzte Prüfung auf abgelaufene Metadaten: vor 1:22:29 am Mi 23 Jan 2019 16:39:44 CET.
Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/dnf/cli/main.py", line 64, in main
return _main(base, args, cli_class, option_parser_class)
File "/usr/lib/python3.7/site-packages/dnf/cli/main.py", line 99, in _main
return cli_run(cli, base)
File "/usr/lib/python3.7/site-packages/dnf/cli/main.py", line 123, in cli_run
ret = resolving(cli, base)
File "/usr/lib/python3.7/site-packages/dnf/cli/main.py", line 146, in resolving
base.resolve(cli.demands.allow_erasing)
File "/usr/lib/python3.7/site-packages/dnf/base.py", line 760, in resolve
self._transaction = self._goal2transaction(goal)
File "/usr/lib/python3.7/site-packages/dnf/base.py", line 657, in _goal2transaction
ts.add_install(pkg, obs, reason)
File "/usr/lib/python3.7/site-packages/dnf/db/group.py", line 256, in add_install
ti_new = self.new(new, libdnf.transaction.TransactionItemAction_INSTALL, reason)
File "/usr/lib/python3.7/site-packages/dnf/db/group.py", line 219, in new
rpm_item = self._pkg_to_swdb_rpm_item(pkg)
File "/usr/lib/python3.7/site-packages/dnf/db/group.py", line 210, in _pkg_to_swdb_rpm_item
rpm_item = self.history.swdb.createRPMItem()
File "/usr/lib/python3.7/site-packages/dnf/db/history.py", line 291, in swdb
self._swdb = libdnf.transaction.Swdb(self.dbpath)
File "/usr/lib64/python3.7/site-packages/libdnf/transaction.py", line 729, in __init__
this = _transaction.new_Swdb(*args)
RuntimeError: Exec failed: malformed database schema (1467577792)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/bin/dnf", line 58, in <module>
main.user_main(sys.argv[1:], exit_code=True)
File "/usr/lib/python3.7/site-packages/dnf/cli/main.py", line 179, in user_main
errcode = main(args)
File "/usr/lib/python3.7/site-packages/dnf/cli/main.py", line 64, in main
return _main(base, args, cli_class, option_parser_class)
File "/usr/lib/python3.7/site-packages/dnf/base.py", line 121, in __exit__
self.close()
File "/usr/lib/python3.7/site-packages/dnf/base.py", line 472, in close
self._finalize_base()
File "/usr/lib/python3.7/site-packages/dnf/base.py", line 455, in _finalize_base
self.history.close()
File "/usr/lib/python3.7/site-packages/dnf/db/history.py", line 305, in close
self.swdb.closeTransaction()
File "/usr/lib/python3.7/site-packages/dnf/db/history.py", line 291, in swdb
self._swdb = libdnf.transaction.Swdb(self.dbpath)
File "/usr/lib64/python3.7/site-packages/libdnf/transaction.py", line 729, in __init__
this = _transaction.new_Swdb(*args)
RuntimeError: Exec failed: malformed database schema (1467577792)
Mirando más a fondo sqlite3 .dump
, veo esto:
/var/lib/dnf# sqlite3 history.sqlite .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
/**** ERROR: (10) disk I/O error *****/
ROLLBACK; -- due to errors
Sin embargo, cuando copio esto y lo ejecuto history.sqlite
allí , obtengo una base de datos de apariencia sensata. También abrirlo con la GUI funciona bien. Parece que la base de datos en sí está bien./tmp
.dump
sqliteman
Volcar la base de datos en un archivo nuevo en otro lugar y copiarla nuevamente me da esto:
/v/l/dnf# dnf update
Letzte Prüfung auf abgelaufene Metadaten: vor 0:30:51 am Sa 26 Jan 2019 13:21:13 CET.
Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/dnf/cli/main.py", line 64, in main
return _main(base, args, cli_class, option_parser_class)
File "/usr/lib/python3.7/site-packages/dnf/cli/main.py", line 99, in _main
return cli_run(cli, base)
File "/usr/lib/python3.7/site-packages/dnf/cli/main.py", line 123, in cli_run
ret = resolving(cli, base)
File "/usr/lib/python3.7/site-packages/dnf/cli/main.py", line 146, in resolving
base.resolve(cli.demands.allow_erasing)
File "/usr/lib/python3.7/site-packages/dnf/base.py", line 760, in resolve
self._transaction = self._goal2transaction(goal)
File "/usr/lib/python3.7/site-packages/dnf/base.py", line 650, in _goal2transaction
reason_obsolete = ts.get_reason(obsolete)
File "/usr/lib/python3.7/site-packages/dnf/db/group.py", line 237, in get_reason
return self.history.swdb.resolveRPMTransactionItemReason(pkg.name, pkg.arch, -1)
File "/usr/lib64/python3.7/site-packages/libdnf/transaction.py", line 788, in resolveRPMTransactionItemReason
return _transaction.Swdb_resolveRPMTransactionItemReason(self, name, arch, maxTransactionId)
RuntimeError: Step: disk I/O error in
SELECT
ti.action as action,
ti.reason as reason
FROM
trans_item ti
JOIN
trans t ON ti.trans_id = t.id
JOIN
rpm i USING (item_id)
WHERE
t.state = 1
/* see comment in TransactionItem.hpp - TransactionItemAction */
AND ti.action not in (3, 5, 7, 10)
AND i.name = 'libmodulemd'
AND i.arch = 'x86_64'
ORDER BY
ti.trans_id DESC
LIMIT 1
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/bin/dnf", line 58, in <module>
main.user_main(sys.argv[1:], exit_code=True)
File "/usr/lib/python3.7/site-packages/dnf/cli/main.py", line 179, in user_main
errcode = main(args)
File "/usr/lib/python3.7/site-packages/dnf/cli/main.py", line 64, in main
return _main(base, args, cli_class, option_parser_class)
File "/usr/lib/python3.7/site-packages/dnf/base.py", line 121, in __exit__
self.close()
File "/usr/lib/python3.7/site-packages/dnf/base.py", line 473, in close
self.reset(sack=True, repos=True, goal=True)
File "/usr/lib/python3.7/site-packages/dnf/base.py", line 504, in reset
self.history.close()
File "/usr/lib/python3.7/site-packages/dnf/db/history.py", line 305, in close
self.swdb.closeTransaction()
File "/usr/lib/python3.7/site-packages/dnf/db/history.py", line 291, in swdb
self._swdb = libdnf.transaction.Swdb(self.dbpath)
File "/usr/lib64/python3.7/site-packages/libdnf/transaction.py", line 729, in __init__
this = _transaction.new_Swdb(*args)
RuntimeError: Exec failed: disk I/O error
Exception ignored in: <function SwdbInterface.__del__ at 0x7f28b02e4510>
Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/dnf/db/history.py", line 262, in __del__
File "/usr/lib/python3.7/site-packages/dnf/db/history.py", line 305, in close
File "/usr/lib/python3.7/site-packages/dnf/db/history.py", line 291, in swdb
File "/usr/lib64/python3.7/site-packages/libdnf/transaction.py", line 729, in __init__
RuntimeError: Exec failed: disk I/O error
También restauré las etiquetas de SELinux, pero eso no cambió nada, es
-rw-r--r--. 1 root root unconfined_u:object_r:rpm_var_lib_t:s0 29M 26. Jan 13:52 history.sqlite
Root también puede leer el archivo:
/v/l/dnf# head -c 1000 history.sqlite
SQLite format 3@ ,�,.,P��⏎
¿Cómo es esto en Fedora 29? ¿Puedo recuperarme de esto?
Respuesta1
Intenté este volcado nuevamente después de reiniciar el sistema. Quizás sea necesario ajustar la restauración de las etiquetas SELinux. Ahora las actualizaciones parecen funcionar nuevamente.
Respuesta2
Estoy desarrollando una imagen de Docker de algún sistema operativo similar a Centos y encontré este error. Puedes jugar con él usando mi imagen:
docker run --rm -it pasaopasen/redos7.3:2023-12-07_22-19 bash
Intenta realizar:
dnf update -y
dnf install nginx -y
y verás el mismo error.
Nada me ayudó a resolver este problema, parece ser el resultado de malas actualizaciones globales del rpm
, python3
etc. Lo resolví simplemente mediante una actualización global desde una copia de seguridad de una instancia de VM antigua