Symlinkin korvaaminen hakemistolla tai hakemiston korvaaminen minkä tahansa tyyppisellä tiedostolla
RPM:n tunnetusta rajoituksesta johtuen hakemistoa ei voi korvata millään tiedostolla tai symbolilinkillä, eikä hakemistoon osoittavaa symbolinkkiä ole mahdollista korvata hakemistolla ilman, että RPM aiheuttaa tiedostoristiriitavirheitä pakettia asennettaessa. Lisätietoja asiaan liittyvistä ongelmista on osoitteessa bug 447156 ja bugi 646523.
Yritä välttää tätä ongelmaa alunalkaen
Vaikka ei tietenkään ole mahdollista ennakoida kaikkia tapauksia, joissa tarve saattaa ilmaantua, kun tarve on ennakoitavissa, kuten niputettujen kirjastojen kanssa, on parempi käyttää symbolista linkkiä alusta alkaen, koska symlinkin kohdetta voidaan muuttaa helpommin. . Jos sinulla on esimerkiksi niputettu libfoo-kirjasto paketin hakemistorakenteen sisällä, sijoita se esimerkiksi libfoo.bundled-hakemistoon ja tee libfoosta symbolinen linkki siihen. Kun niputtaminen lopulta poistetaan, sinun tarvitsee vain pudottaa hakemisto ja muuttaa symbolinen linkki osoittamaan vastaavaan järjestelmäkirjastohakemistoon turvautumatta alla kuvattuihin komentosarjoihin.
Ongelman kiertäminen komentosarjoilla
Voit kiertää tämän ongelman lisäämällä tiedostoon %pretrans scriptlet, joka suorittaa muunnoksen manuaalisesti ennen kuin RPM yrittää asentaa paketin.
Huomaa, että '%pretrans'-komentosarjat TÄYTYY kirjoittaa Lua:ssa ja siten käyttää -p <lua>
toimiakseen järjestelmän alkuasennuksen aikana, jolloin komentotulkkia ei ole vielä asennettu.
Käytä kumpaa tahansa seuraavista kahdesta katkelmasta paketeissa, jotka tarvitsevat tämän siirtymän. Korvaa /path/to/dir
muunnettavan hakemiston polulla.
Komentosarja hakemiston korvaamiseksi
RPM ei voi vain poistaa hakemistoa, kun se korvataan tiedostolla tai symbolilinkillä, koska käyttäjät ovat saattaneet lisätä tai muokata tiedostoja hakemistoon. Suojataksesi vahingossa tapahtuvalta tietojen katoamiselta sinun TÄYTYY käyttää seuraavaa komentosarjaa, joka nimeää hakemiston uudelleen jälkiliitteellä .rpmmoved
, jotta käyttäjät voivat löytää varmuuskopioidut hakemistot tarvittaessa paketin päivityksen jälkeen. (Se lisää myös kokonaisluvun loppuliitteeseen siinä harvinaisessa tapauksessa, että myös hakemisto on olemassa.)
%pretrans -p <lua> -- Määritä polku korvattavaan hakemistoon alla. -- ÄLÄ lisää perään kauttaviivaa. path = "/path/to/dir" st = posix.stat(path) if st and st.type == "directory" then status = os.rename(path, path .. ".rpmmoved") if not status then suffix = 0 while not status do suffix = suffix + 1 status = os.rename(path .. ".rpmmoved", path .. ".rpmmoved." .. suffix) end os.rename(path, path .. ".rpmmoved") end end
Lisäksi sinun tulee määrittää hakemisto /path/to/dir.rpmmoved
%ghost
-merkinnäksi paketin spec-tiedoston %files
-luettelossa, jotta hakemisto ei eriydy paketista ja voidaan poistaa, jos paketti joskus poistetaan ja hakemisto on tyhjä.
Komentosarja, joka korvaa symbolisen linkin hakemistoon hakemistolla
Hakemistoon osoittavan symbolisen linkin korvaaminen tavallisella hakemistolla on paljon yksinkertaisempaa, koska ei ole mahdollista poistaa vahingossa ulkoisesti lisättyjä tiedostoja. Seuraava komentosarja tarkistaa symbolin ja poistaa sen. Hakemistoa ei tarvitse luoda tänne, koska RPM tekee sen myöhemmin tapahtuman aikana, kun paketti on asennettu.
%pretrans -p <lua> -- Määritä polku korvattavaan symbolilinkkiin alla. path = "/path/to/dir" st = posix.stat(path) if st and st.type == "link" then os.remove(path) end
Want to help? Learn how to contribute to Fedora Docs ›