345 #ifndef LIB_CARDS_INCLUDED
346 #define LIB_CARDS_INCLUDED
355 #include <sys/utsname.h>
364 std::string getMachineType ();
371 #define RED "\033[1;31m"
372 #define GREEN "\033[1;32m"
373 #define YELLOW "\033[1;33m"
374 #define BLUE "\033[1;34m"
375 #define MAGENTA "\033[1;35m"
376 #define CYAN "\033[1;36m"
377 #define WHITE "\033[1;37m"
378 #define NORMAL "\033[1;0m"
380 #define ACTION _("\033[1;33maction:\033[1;0m")
381 #define USAGE _("\033[1;33musage: \033[1;0m")
382 #define OPTIONS _("\033[1;33moptions\033[1;0m")
383 #define REQUIRED _("\033[1;33mrequired\033[1;0m")
384 #define DESCRIPTION _("\033[1;33mdescription: \033[1;0m")
385 #define COMMAND _("\033[1;34mcommand\033[1;0m")
391 CANNOT_DOWNLOAD_FILE,
398 CANNOT_READ_DIRECTORY,
402 CANNOT_DETERMINE_NAME_BUILDNR,
408 CANNOT_LOCK_DIRECTORY,
410 CANNOT_CREATE_DIRECTORY,
411 CANNOT_RENAME_DIRECTORY,
416 ONLY_ROOT_CAN_INSTALL_UPGRADE_REMOVE,
419 PACKAGE_ALLREADY_INSTALL,
421 PACKAGE_NOT_PREVIOUSLY_INSTALL,
422 LISTED_FILES_ALLREADY_INSTALLED,
423 PKGADD_CONFIG_LINE_TOO_LONG,
424 PKGADD_CONFIG_WRONG_NUMBER_ARGUMENTS,
425 PKGADD_CONFIG_UNKNOWN_ACTION,
426 PKGADD_CONFIG_UNKNOWN_EVENT,
427 CANNOT_COMPILE_REGULAR_EXPRESSION,
428 CANNOT_GENERATE_LEVEL,
429 NOT_INSTALL_PACKAGE_NEITHER_PACKAGE_FILE
442 #define uint8 unsigned char
443 #define uint32 unsigned long int
453 void md5_update(
struct md5_context *ctx, uint8 *input, uint32 length );
454 void md5_finish(
struct md5_context *ctx, uint8 digest[16] );
464 #include <sys/stat.h>
469 #define PACKAGE_LOCALE_DIR "/usr/share/locale"
470 #define GETTEXT_PACKAGE "cards"
472 void *Malloc(
size_t s);
476 std::string parameter;
497 void addItemToItemList(
itemList *list,
const char *item);
509 (std::string s,
char delimiter);
511 std::set<std::string> getKeysList
512 (std::string file, std::string delimiter);
514 std::string getValueOfKey
515 (std::string file, std::string delimiter,std::string parameter);
517 std::string getValue(
const std::string& s,
char delimiter);
518 std::string getValueBefore(
const std::string& s,
char del );
519 std::string getValueBeforeLast(
const std::string& s,
char del );
521 std::string itos(
unsigned int value);
522 std::string ultos(
unsigned long int value);
524 std::string mtos(mode_t mode);
525 std::string trimFileName(
const std::string& filename);
526 std::string sizeHumanRead(
int value);
530 std::string getFirstValueOfKeyAfterDelim(
const std::string& s,
char delimiter);
533 std::string stripWhiteSpace(
const std::string& s);
536 std::vector<std::string> parseDelimitedList
537 (
const std::string& s,
const char delimiter);
540 std::set<std::string> parseDelimitedSetList
541 (
const std::string& s,
const char delimiter);
544 bool startsWith(
const std::string& s,
const std::string& with);
550 bool startsWithNoCase(
const std::string& s1,
const std::string& s2);
552 std::string convertToLowerCase(
const std::string& s);
553 std::string convertToUpperCase(
const std::string& s);
555 std::string replaceAll
556 ( std::string& in,
const std::string& oldString,
const std::string& newString );
568 void split(
const std::string& s,
char del,
570 int startPos,
bool useEmpty )
572 std::string line = s;
574 std::string::size_type pos;
575 int offset = startPos;
576 while ( ( pos = line.find( del, offset ) ) != std::string::npos ) {
578 if ( line[pos-1] ==
'\\' ) {
580 ss = ss + line.substr(0,pos);
584 std::string val = line.substr( 0, pos );
585 if ( ( useEmpty || !stripWhiteSpace( val ).empty() ) ||
586 ( ss.length() > 0 ) ) {
587 target.push_back( ss + val );
589 line.erase( 0, pos+1 );
592 if ( ( line.length() > 0 ) || ( ss.length() > 0 ) ) {
593 target.push_back( ss + line );
602 #include <sys/param.h>
603 #include <sys/file.h>
608 #define S_CARDS_MODE 0755
611 #define WS_RECURSIVE (1 << 0)
612 #define WS_DEFAULT WS_RECURSIVE
613 #define WS_FOLLOWLINK (1 << 1)
614 #define WS_DOTFILES (1 << 2)
615 #define WS_MATCHDIRS (1 << 3)
627 std::string filename;
642 std::string hostname;
643 std::string database;
644 std::string username;
645 std::string password;
647 std::string collection;
653 std::vector<std::string> group;
654 std::vector<DirUrl> dirUrl;
655 std::vector<std::string> baseDir;
656 std::vector<std::string> archs;
659 int getConfig(
const char *fileName,
Config& config);
660 void * getDatas (
void * var, FILE * file,
long offset,
size_t size,
size_t nmemb);
661 std::string trimFileName(
const std::string& filename);
662 time_t getEpochModifyTimeFile(
const std::string& filename);
663 std::string getDateFromEpoch(
const time_t& epoch);
664 std::string getModifyTimeFile(
const std::string& filename);
665 bool checkFileExist(
const std::string& filename);
666 bool checkFileEmpty(
const std::string& filename);
667 bool checkRegularFile(
const std::string& filename);
668 bool checkFileSignature(
const std::string& filename,
const std::string& signature);
669 bool checkFilesEqual(
const std::string& file1,
const std::string& file2);
670 bool checkPermissionsEqual(
const std::string& file1,
const std::string& file2);
671 bool createRecursiveDirs(
const std::string& pathname);
672 void cleanupMetaFiles(
const std::string& basedir);
673 void removeFile(
const std::string& basedir,
const std::string& filename);
674 int copyFile(
const char * destFile,
const char * origFile);
675 int findFile(std::set<std::string>& filesList,
const std::string& basedir);
676 int findDir(
itemList *filenameList,
const char *path);
677 int findRecursiveFile(std::set<std::string>& filenameList,
const char *filename,
int spec);
678 int readFileStripSpace(
itemList *fileContent,
const char *fileName);
679 int readFile(
itemList *fileContent,
const char *fileName);
680 int parseFile(std::set<std::string>& fileContent,
const char* fileName);
681 int parseFile(std::vector<std::string>& fileContent,
const char* fileName);
682 int parseFile(std::string& Depends,
const char* key,
const char* fileName);
683 bool findMD5sum(
const std::string& fileName,
unsigned char* result);
684 bool checkMD5sum(
const char * fileName,
const char * MD5Sum);
688 int parseFile( T& target,
const char* fileName)
690 FILE *fp = fopen (fileName,
"r");
693 const int length = BUFSIZ;
696 while (fgets(input, length, fp)) {
697 input[strlen(input)-1] =
'\0';
699 target.push_back(line);
710 #include <archive_entry.h>
713 #if ARCHIVE_VERSION_NUMBER >= 3000000
714 #define INIT_ARCHIVE(ar) \
715 archive_read_support_filter_gzip((ar)); \
716 archive_read_support_filter_bzip2((ar)); \
717 archive_read_support_filter_xz((ar)); \
718 archive_read_support_filter_zstd((ar)); \
719 archive_read_support_format_tar((ar))
720 #define FREE_ARCHIVE(ar) \
721 archive_read_free((ar))
723 #define INIT_ARCHIVE(ar) \
724 archive_read_support_compression_gzip((ar)); \
725 archive_read_support_compression_bzip2((ar)); \
726 archive_read_support_compression_xz((ar)); \
727 archive_read_support_format_tar((ar))
728 #define FREE_ARCHIVE(ar) \
729 archive_read_finish((ar))
732 #define DEFAULT_BYTES_PER_BLOCK (20 * 512)
733 #define METAFILE ".META"
734 #define INFOFILE ".INFO"
735 #define MTREEFILE ".MTREE"
741 CANNOT_FIND_META_FILE,
742 CANNOT_FIND_MTREE_FILE,
757 virtual void treatErrors(
const std::string& s)
const;
765 unsigned int long size();
766 std::set<std::string> setofFiles();
767 std::set<std::string> listofDependencies();
768 std::set<std::string> listofAlias();
769 std::set<std::pair<std::string,time_t> > listofDependenciesBuildDate();
771 std::string version();
773 std::string description();
775 std::string contributors();
776 std::string maintainer();
777 std::string collection();
778 std::string packager();
779 std::string builddate();
782 std::string namebuildn();
783 std::string epochBuildDate();
788 std::string getPackageName();
789 std::string getPackageArch();
790 std::vector<std::string> extractFileContent(
const char * fileName);
791 void getRunTimeDependencies();
792 void getRunTimeDependenciesEpoch();
795 unsigned int long m_size;
797 std::vector<std::string> m_contentMtree;
798 std::vector<std::string> m_contentMeta;
799 std::vector<std::string> m_contentInfo;
801 std::set<std::string> m_rtDependenciesList;
802 std::set<std::pair<std::string,time_t> > m_rtDependenciesEpochList;
803 std::string m_fileName;
804 std::string m_packageName;
805 std::string m_packageArch;
806 std::set<std::string> m_filesList;
807 std::set<std::string> m_aliasList;
809 archive_error m_actualError;
812 int openArchive(
const char *fileName);
855 std::string getName();
856 std::string getVersion();
857 std::string getPackager();
858 std::string getDescription();
859 void setName(std::string& name);
860 void setDescription(std::string& description);
861 void setVersion(std::string& version);
862 void setCollection(std::string& collection);
863 void setPackager(std::string& packager);
865 bool isToBeInstalled();
866 bool isToBeRemoved();
867 void setStatus(CPSTATUS pstatus);
868 void unSetStatus(CPSTATUS pstatus);
869 CPSTATUS getStatus();
872 std::string m_collection;
874 std::string m_version;
875 std::string m_packager;
876 std::string m_description;
903 std::string s_buildDate;
904 std::string basePackageName;
905 std::string extention;
908 std::string description;
909 std::string categories;
911 std::string contributors;
912 std::string maintainer;
913 std::string packager;
914 std::string fileDate;
919 std::vector<PortFilesList> portFilesList;
925 std::vector<BasePackageInfo> basePackageList;
933 std::string collection;
934 std::vector<BasePackageInfo> basePackageList;
941 Pkgrepo(
const std::string& fileName);
942 virtual ~
Pkgrepo() { clearPackagesList(); }
944 static int parseConfig(
const char *fileName,
947 void throwError(
const std::string& s)
const;
965 std::string
getPortDir (
const std::string& portName);
1043 bool getBinaryPackageInfo(
const std::string& packageName);
1044 bool getPortInfo(
const std::string& portName);
1051 int parseConfig(
const char *fileName);
1100 bool m_parsePkgRepoCollectionFile;
1101 bool m_parseCollectionDirectory;
1102 bool m_parsePackagePkgfileFile;
1104 std::vector<PortsDirectory>::iterator m_PortsDirectory_i;
1105 std::vector<BasePackageInfo>::iterator m_BasePackageInfo_i;
1106 std::vector<PortFilesList>::iterator m_PortFilesList_i;
1108 std::vector<PortFilesList> m_portFilesList;
1110 std::string m_configFileName;
1113 std::vector<PortsDirectory> m_portsDirectoryList;
1116 void clearPackagesList();
1117 std::set<Pkg*> m_packagesList;
1124 Repodwl(
const char *fileName);
1148 bool checkBinaryExist(
const std::string& packageName);
1149 std::string getPackageFileName(
const std::string& packageName);
1150 std::string getPackageFileNameSignature(
const std::string& packageName);
1152 void setPackageFileName(
const std::string& packageFileNmae);
1155 std::string m_packageFileName;
1156 std::string m_packageFileNameSignature;
1165 #include <curl/curl.h>
1183 std::string filename;
1233 FileDownload(std::string url, std::string dirName, std::string fileName,
bool progress);
1244 FileDownload(std::string fileInfo, std::string url, std::string dirName, std::string fileName, std::string MD5Sum ,
bool progress);
1260 curl_slist_free_all(m_slist);
1261 curl_global_cleanup();
1262 curl_easy_cleanup(m_curl);
1279 void downloadFile();
1281 static int updateProgressHandle(
void *p,
double dltotal,
double dlnow,
double ultotal,
double ulnow);
1282 static size_t writeToStreamHandle(
void *buffer,
size_t size,
size_t nmemb,
void *stream);
1283 int updateProgress(
void *p,
double dltotal,
double dlnow,
double ultotal,
double ulnow);
1284 size_t writeToStream(
void *buffer,
size_t size,
size_t nmemb,
void *stream);
1285 void initFileToDownload(std::string _url, std::string _file);
1290 bool checkUpToDate();
1298 struct curl_slist *m_slist;
1301 CURLcode m_curlCode;
1302 dwlProgress m_downloadProgress;
1305 std::string m_downloadFileName;
1306 std::string m_fileInfo;
1309 std::string m_MD5Sum;
1310 static std::set<FileDownloadEvent*> m_arrCallBacks;
1324 #include <sys/types.h>
1325 #include <sys/wait.h>
1340 process(
const std::string& app,
const std::string&
args,
int fileDescriptorLog=0 );
1342 void execute(
const std::string& app,
const std::string& arguments,
int fileDescriptorLog=0 );
1368 int exec(
const int argc,
char** argv);
1369 int execLog(
const int argc,
char** argv);
1371 int execShell(
const char* shell);
1372 int execShellLog(
const char* shell);
1374 std::string m_application;
1375 std::string m_arguments;
1376 int m_fileDescriptorLog;
1386 #include <sys/stat.h>
1389 int getRuntimeLibrariesList (std::set<std::string>& runtimeLibrariesList,
const std::string& filename);
1398 #include <stdexcept>
1400 #include <algorithm>
1403 #include <ext/stdio_filebuf.h>
1409 #define LDCONFIG "sbin/ldconfig"
1410 #define LDCONFIG_CONF "etc/ld.so.conf"
1411 #define LDCONFIG_CONF_ARGS "-r "
1412 #define SHELL "bin/sh"
1414 #define INSTALL_INFO "usr/bin/install-info"
1415 #define INSTALL_INFO_ARGS "--info-dir=usr/share/info "
1417 #define UPDATE_ICON "usr/bin/gtk-update-icon-cache"
1418 #define UPDATE_ICON_ARGS "-f -t "
1420 #define COMPILE_SCHEMAS "usr/bin/glib-compile-schemas"
1421 #define COMPILE_SCHEMAS_ARGS ""
1423 #define UPDATE_DESKTOP_DB "usr/bin/update-desktop-database"
1424 #define UPDATE_DESKTOP_DB_ARGS "-q "
1426 #define UPDATE_MIME_DB "usr/bin/update-mime-database"
1427 #define UPDATE_MIME_DB_ARGS "-n "
1429 #define GDK_PIXBUF_QUERY_LOADER "usr/bin/gdk-pixbuf-query-loaders"
1430 #define GDK_PIXBUF_QUERY_LOADER_ARGS "--update-cache"
1432 #define GIO_QUERYMODULES "usr/bin/gio-querymodules"
1433 #define GIO_QUERYMODULES_ARGS "usr/lib/gio/modules"
1435 #define QUERY_IMMODULES_3 "usr/bin/gtk-query-immodules-3.0"
1436 #define QUERY_IMMODULES_3_ARGS "--update-cache"
1438 #define QUERY_IMMODULES_2 "usr/bin/gtk-query-immodules-2.0"
1439 #define QUERY_IMMODULES_2_ARGS "--update-cache"
1441 #define MKFONTDIR "usr/bin/mkfontdir"
1442 #define MKFONTDIR_ARGS ""
1444 #define MKFONTSCALE "usr/bin/mkfontscale"
1445 #define MKFONTSCALE_ARGS ""
1447 #define FC_CACHE "usr/bin/fc-cache"
1448 #define FC_CACHE_ARGS ""
1458 PKG_PREINSTALL_START,
1463 PKG_POSTINSTALL_START,
1464 PKG_POSTINSTALL_END,
1465 PKG_MOVE_META_START,
1478 std::string collection;
1479 std::string description;
1480 std::string signature;
1482 std::string version;
1485 std::string contributors;
1486 std::string packager;
1487 std::string maintainer;
1492 std::set< std::pair<std::string,time_t> > dependencies;
1493 std::set<std::string> alias;
1494 std::set<std::string> set;
1495 std::set<std::string> categories;
1496 std::set<std::string> files;
1498 typedef std::map<std::string, pkginfo_t> packages_t;
1499 typedef std::map<std::string, std::string> alias_t;
1519 std::string pattern;
1526 explicit Pkgdbh(
const std::string& name);
1530 virtual void parseArguments(
int argc,
char** argv);
1531 virtual void run(
int argc,
char** argv) {};
1532 virtual void run() {};
1534 virtual void printHelp()
const {};
1536 virtual void progressInfo();
1537 virtual void treatErrors(
const std::string& s)
const;
1540 void print_version()
const;
1541 int getNumberOfPackages();
1542 std::set<std::string> getListOfPackageName();
1544 bool checkPackageNameExist(
const std::string& name)
const;
1545 bool checkDependency(
const std::string& name);
1546 void setDependency();
1547 void resetDependency();
1549 unsigned int getFilesNumber();
1550 unsigned int getInstalledFilesNumber();
1551 std::set<std::string> getFilesList();
1556 std::set<std::string> getFilesOfPackage(
const std::string& packageName);
1557 int getListOfPackageNames(
const std::string& path);
1558 std::pair<std::string, pkginfo_t> getInfosPackage(
const std::string& packageName);
1567 const std::string& packageName);
1570 void addPackageFilesRefsToDB(
const std::string& name,
1573 bool checkPackageNameUptodate(
const std::pair<std::string,
1575 bool checkPackageNameBuildDateSame(
const std::pair<std::string,
1576 time_t>& dependencieNameBuild);
1581 void removePackageFiles(
const std::string& name);
1582 void removePackageFiles(
const std::string& name,
1583 const std::set<std::string>& keep_list);
1588 void removePackageFilesRefsFromDB(
const std::string& name);
1589 void removePackageFilesRefsFromDB(std::set<std::string> files,
1590 const std::set<std::string>& keep_list);
1591 std::set<std::string> getConflictsFilesList(
const std::string& name,
1595 std::pair<std::string, pkginfo_t> openArchivePackage(
const std::string& filename);
1596 std::set< std::pair<std::string, time_t> > getPackageDependencies(
const std::string& filename);
1597 void extractAndRunPREfromPackage(
const std::string& filename);
1598 void installArchivePackage(
const std::string& filename,
1599 const std::set<std::string>& keep_list,
1600 const std::set<std::string>& non_install_files);
1605 void moveMetaFilesPackage(
const std::string& name,
pkginfo_t& info);
1608 void readRulesFile();
1609 void getInstallRulesList(
const std::vector<rule_t>& rules,
1610 rule_event_t event, std::vector<rule_t>& found)
const;
1611 bool checkRuleAppliesToFile(
const rule_t& rule,
1612 const std::string& file);
1614 void getFootprintPackage(std::string& filename);
1616 std::string m_packageArchiveName;
1617 std::string m_packageName;
1618 std::string m_packageArchiveVersion;
1619 std::string m_packageArchiveRelease;
1620 std::string m_packageArchiveCollection;
1621 std::string m_packageVersion;
1622 std::string m_packageRelease;
1623 std::string m_packageCollection;
1624 std::string m_utilName;
1626 std::string m_build;
1627 std::vector<rule_t> m_actionRules;
1628 std::set< std::pair<std::string, int> > m_postInstallList;
1629 alias_t m_listOfAlias;
1631 packages_t m_listOfInstPackages;
1632 packages_t m_listOfDepotPackages;
1634 std::set<std::pair<std::string,std::set<std::string> > > m_listOfInstalledPackagesWithDeps;
1636 action m_actualAction;
1637 error m_actualError;
1641 void runLastPostInstall();
1643 std::set<std::string> m_runtimeLibrariesList;
1644 std::set<std::string> m_filesList;
1645 std::set<std::string> m_packageNamesList;
1646 unsigned int m_filesNumber;
1647 unsigned int m_installedFilesNumber;
1652 bool m_miniDB_Empty;
1657 Db_lock(
const std::string& m_root,
bool exclusive);
1662 struct sigaction m_sa;
1665 void assertArgument(
char** argv,
int argc,
int index);
1666 void rotatingCursor();
1692 Pkgadd(
const std::string& commandName);
1693 void parseArguments(
int argc,
char** argv);
1697 virtual void run(
int argc,
char** argv);
1698 virtual void printHelp()
const;
1705 std::set<std::string> getKeepFileList(
const std::set<std::string>& files,
1706 const std::vector<rule_t>& rules);
1707 std::set<std::string> applyInstallRules(
const std::string& name,
1709 const std::vector<rule_t>& rules);
1710 void applyPostInstallRules(
const std::string& name,
1712 const std::vector<rule_t>& rules);
1713 void getInstallRulesList(
const std::vector<rule_t>& rules,
1715 std::vector<rule_t>& found)
const;
1716 void getPostInstallRulesList(
const std::vector<rule_t>& rules,
1717 std::vector<rule_t>& found)
const;
1728 Pkgrm(
const std::string& commandName) :
Pkgdbh(commandName) {}
1731 void run(
int argc,
char** argv);
1732 void printHelp()
const;
1735 void getListOfManInstalledPackages ();
1736 std::set<std::string> m_listOfManInstalledPackages;
1737 std::set<std::string> m_listofDependencies;
1739 void getDirectDependencies(std::string& name);
1756 Pkginfo(
const std::string& commandName);
1758 virtual void run(
int argc,
char** argv);
1759 virtual void parseArguments(
int argc,
char** argv);
1761 virtual void finish();
1762 virtual void printHelp()
const;
1766 int m_runtimedependencies_mode;
1767 int m_footprint_mode;
1769 int m_installed_mode;
1773 int m_libraries_mode;
1776 bool m_fulllist_mode;
1786 Pkginst(
const std::string& commandName,
const char *configFileName);
1787 void generateDependencies(
const std::pair<std::string,time_t>& packageName);
1788 void generateDependencies();
1791 std::vector< std::pair<std::string,time_t> > m_dependenciesList;
1800 #include <curl/curl.h>
1801 #include <sys/types.h>
1802 #include <sys/stat.h>
1815 Pkgsync(
const std::string& url,
1816 const std::string& directory,
1817 const std::string& repoFile);
1819 virtual void treatErrors(
const std::string& s)
const;
1822 virtual void purge();
1823 static const std::string DEFAULT_REPOFILE;
1825 void setRootPath(
const std::string& path);
1826 void setConfigFile(
const std::string& file);
1830 unsigned int getLocalPackages(
const std::string& path);
1831 unsigned int getRemotePackages(
const std::string& pkgrepoFile);
1833 void deleteFolder(
const std::string& folderName);
1835 std::set<std::string> m_localPackagesList;
1836 std::set<std::string> m_remotePackagesList;
1837 const std::string m_baseDirectory;
1838 const std::string m_remoteUrl;
1839 std::string m_repoFile;
1841 std::string m_configFile;
1842 error m_actualError;