RPM API to install rpms

shruthi srinivasalu shruthisrinivasalu at yahoo.co.in
Mon May 25 12:51:15 UTC 2009


Hi,
I am trying to install rpms using rpminstall() API and rpmAddInstallElement() method. I want to relocate my rpm installation to a different location, but its not working. 
Here is what i am doing:
Using rpminstall() API:
 
int main()
{

ts = rpmtsCreate();
rpmtsSetRootDir(ts, NULL);
add_for_install(ts, optarg, upgrade);
tsi = rpmtsiInit(ts);
rc = rpmtsCheck(ts);
probs = rpmtsProblems(ts);
if (rc || probs->numProblems > 0) {
rpmpsPrint(fp, probs); // trying to redirect install logs to a file
while(fgets(buf,128,fp))
{
data.append(buf);
}
 
rpmpsFree(probs);
rpmtsFree(ts);
exit(rc);
}

/* Create ordering for the transaction */
rc = rpmtsOrder(ts);
if (rc > 0) {
printf("Ordering failed\n");
rpmtsFree(ts);
exit(rc);
}
rpmtsClean(ts);
/* Set callback routine & flags, for example -vh */
notifyFlags |= INSTALL_LABEL | INSTALL_HASH;
rpmtsSetNotifyCallback(ts, rpmShowProgress, (void *)notifyFlags);
/* Set transaction flags and run the actual transaction */
rpmtsSetFlags(ts, (rpmtransFlags)(rpmtsFlags(ts) | tsFlags));
rc = rpmtsRun(ts, NULL, (rpmprobFilterFlags)probFilter);
/* Check for results .. */
if (rc || probs->numProblems > 0)
rpmpsPrint(fp, probs);
while(fgets(buf,128,fp))
{
data.append(buf);  // trying to redirect logs to a file
}
rpmpsFree(probs);
rpmtsFree(ts);
exit(rc);

}


 
 
int add_for_install(rpmts ts, char *file, int upgrade)
{
FD_t fd;
Header hdr;
int rc = 0;
rpmRelocation * relocs;
relocs = (rpmRelocation *)malloc(2*sizeof(rpmRelocation));
relocs->oldPath = "/opt/";
relocs->newPath = "/mnt/tmp"; // trying to relocate installation to a diff directory
/* Read package header */
fd = Fopen(file, "r.ufdio");
if (fd == NULL) {
printf("Unable to open file %s\n", file);
return 1;
}
 
rc = rpmReadPackageFile(ts, fd, file, &hdr);
if (rc != RPMRC_OK) {
printf("Unable to read package %s\n", file);
return rc;
}
/* Add it to the transaction set */
rc = rpmtsAddInstallElement(ts, hdr, file, upgrade,relocs);
 
if (rc) {
printf("Error adding %s to transaction\n", file);
goto out;
}
out:
headerFree(hdr);
Fclose(fd);
return rc;
}
 
I dont understand why the installation is not happening into a different directory.Can any one guide please.
 
Thanks,
Shruthi 


      Explore and discover exciting holidays and getaways with Yahoo! India Travel http://in.travel.yahoo.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rpm.org/pipermail/rpm-list/attachments/20090525/93bf5232/attachment.htm>


More information about the Rpm-list mailing list