From 715aa383fcac0f982b5f4a1a9d184a05dcd75d20 Mon Sep 17 00:00:00 2001 From: kokkiemouse Date: Wed, 11 Nov 2020 17:48:39 +0900 Subject: [PATCH] fixed aur Signed-off-by: kokkiemouse --- system/cpp-src/mkalteriso/CMakeLists.txt | 2 + system/cpp-src/mkalteriso/command_collection.cpp | 98 +++++++++++++++++++++++- system/cpp-src/mkalteriso/command_collection.h | 11 +++ system/cpp-src/mkalteriso/main.cpp | 1 + 4 files changed, 111 insertions(+), 1 deletion(-) diff --git a/system/cpp-src/mkalteriso/CMakeLists.txt b/system/cpp-src/mkalteriso/CMakeLists.txt index cb32cf95..0a0f7dea 100644 --- a/system/cpp-src/mkalteriso/CMakeLists.txt +++ b/system/cpp-src/mkalteriso/CMakeLists.txt @@ -21,5 +21,7 @@ add_executable(mkalteriso command_collection.h custom_system_exec.h custom_system_exec.cpp + qstringls_to_str.h + qstringls_to_str.cpp ) target_link_libraries(mkalteriso Qt5::Core) diff --git a/system/cpp-src/mkalteriso/command_collection.cpp b/system/cpp-src/mkalteriso/command_collection.cpp index e84ffd8d..917fc1ad 100644 --- a/system/cpp-src/mkalteriso/command_collection.cpp +++ b/system/cpp-src/mkalteriso/command_collection.cpp @@ -3,6 +3,7 @@ command_collection::command_collection(QObject *parent) : QObject(parent) { umount_kun_old=false; +umount_kun=false; } void command_collection::set_build_setting(build_setting* bss){ bskun=bss; @@ -57,7 +58,7 @@ int command_collection::_chroot_init(){ dir.mkpath("airootfs"); } if(bskun->get_aur()){ - + _create_img_sys(); } if(bskun->get_wsl()){ @@ -222,6 +223,27 @@ int command_collection::_mount_airootfs_old(){ return 0; } +int command_collection::_mount_airootfs(){ + umount_kun=true; + QDir dir(bskun->get_work_dir()); + if(!dir.exists("airootfs")){ + dir.mkpath("airootfs"); + } + _msg_info("Mounting '" + bskun->get_work_dir() + "/airootfs.img' on '" + bskun->get_work_dir() + "/airootfs'"); + //QString mount_cmd="mount \"" + bskun->get_work_dir() + "/airootfs.img\" \"" + bskun->get_work_dir() + "/airootfs\""; //イメージのマウントコマンドの生成 + QStringList mount_cmd_list; + mount_cmd_list << "mount" << bskun->get_work_dir() + "/airootfs.img" << bskun->get_work_dir() + "/airootfs"; + _msg_infodbg(mount_cmd_list); //デバッグ時のみ表示 + int ret=custom_exec(mount_cmd_list); //実行 + if(ret != 0){ //エラー時 + _msg_err(QString("mount airootfs\nError code : ") + QString::number(ret)); + return 2; + } + + _msg_success("Done!"); + return 0; + +} void command_collection::_umount_airootfs_old(){ _msg_info("Unmounting '" + bskun->get_work_dir() + "/mnt/airootfs'"); QString umount_cmdrun="umount -d \"" + bskun->get_work_dir() + "/mnt/airootfs\""; @@ -233,11 +255,73 @@ void command_collection::_umount_airootfs_old(){ system(rmdirkun.toUtf8().data()); } +void command_collection::_umount_airootfs(){ + + _msg_info("Unmounting '" + bskun->get_work_dir() + "/airootfs'"); + QStringList umount_cmdrun; + umount_cmdrun << "umount" << "-d" << bskun->get_work_dir() + "/airootfs"; + _msg_info(umount_cmdrun); + //system(umount_cmdrun.toUtf8().data()); + custom_exec(umount_cmdrun); + _msg_success("Done!"); + QStringList rmdirkun; + rmdirkun << "rmdir" << "-rf" << bskun->get_work_dir() + "/airootfs"; + custom_exec(rmdirkun); + QStringList rmdir_imgkun; + rmdir_imgkun << "rmdir" << "-rf" << bskun->get_work_dir() + "/airootfs.img"; + custom_exec(rmdir_imgkun); + umount_kun=false; +} void command_collection::force_umount_old(){ if(umount_kun_old){ _umount_airootfs_old(); } } +void command_collection::force_umount(){ + if(umount_kun){ + _umount_airootfs(); + } +} +int command_collection::_create_img_sys(){ + int ret; + + QDir workdirkun(bskun->get_work_dir()); + if(!workdirkun.exists("airootfs")){ + _msg_err("The path '" + bskun->get_work_dir() + "/airootfs' does not exist"); + return 1; + } + _msg_info("Creating ext4 image of 32GiB..."); + QStringList truncate_cmdstr_list; + truncate_cmdstr_list << "truncate" << "-s" << "32GB" << bskun->get_work_dir() + "/airootfs.img"; + _msg_infodbg(truncate_cmdstr_list); + ret = custom_exec(truncate_cmdstr_list); + if(ret != 0){ + _msg_err(QString("truncate ! \nError code : ") + QString::number(ret)); + return 4; + } + QStringList mkfs_ext4_cmdstrlist; + mkfs_ext4_cmdstrlist << "mkfs.ext4" << "-O" << "^has_journal,^resize_inode" << "-E" << "lazy_itable_init=0" << "-m" << "0" << "-F" << + bskun->get_work_dir() + "/airootfs.img"; + _msg_infodbg(mkfs_ext4_cmdstrlist); + ret=custom_exec(mkfs_ext4_cmdstrlist); + if(ret != 0){ + _msg_err(QString("mkfs.ext4 ! \nError code : ") + QString::number(ret)); + return 5; + } + QStringList tune2fs_cmdstrlist; + tune2fs_cmdstrlist << "tune2fs" << "-c" << "0" << "-i" << "0" << bskun->get_work_dir() + "/airootfs.img"; + _msg_infodbg(tune2fs_cmdstrlist); + ret=custom_exec(tune2fs_cmdstrlist); + if(ret != 0){ + _msg_err(QString("tune2fs ! \nError code : ") + QString::number(ret)); + return 5; + } + _msg_success("Done!"); + ret=_mount_airootfs(); + if(ret != 0){ + return ret; + } +} int command_collection::_mkairootfs_img_old(){ int ret; QDir workdirkun(bskun->get_work_dir()); @@ -564,14 +648,26 @@ void command_collection::_checksum_common(QString sum_file){ void command_collection::_msg_info(QString s){ std::wcout << "[mkalteriso] INFO: " << s.toStdWString() << std::endl; } +void command_collection::_msg_info(QStringList s){ + _msg_info(qstrls_to_qstr(s)); +} void command_collection::_msg_infodbg(QString s){ if(!bskun->get_quiet() || bskun->get_debug_mode()){ std::wcout << "\e[35m[mkalteriso] DEBUG: " << s.toStdWString() << "\e[0m" << std::endl; } } +void command_collection::_msg_infodbg(QStringList s){ + _msg_infodbg(qstrls_to_qstr(s)); +} void command_collection::_msg_success(QString s){ std::wcout << "\e[32m[mkalteriso] INFO: " << s.toStdWString() << "\e[0m" << std::endl; } +void command_collection::_msg_success(QStringList s){ + _msg_success(qstrls_to_qstr(s)); +} void command_collection::_msg_err(QString s){ std::wcerr << "\e[31m[mkalteriso] ERROR: " << s.toStdWString() << "\e[0m" << std::endl; } +void command_collection::_msg_err(QStringList s){ + _msg_err(qstrls_to_qstr(s)); +} diff --git a/system/cpp-src/mkalteriso/command_collection.h b/system/cpp-src/mkalteriso/command_collection.h index de856f38..49cc1197 100644 --- a/system/cpp-src/mkalteriso/command_collection.h +++ b/system/cpp-src/mkalteriso/command_collection.h @@ -8,6 +8,7 @@ #include #include "build_setting.h" #include "custom_system_exec.h" +#include "qstringls_to_str.h" class command_collection : public QObject { Q_OBJECT @@ -23,9 +24,12 @@ public: int command_tarball(QString); int command_iso(QString); void force_umount_old(); + void force_umount(); + private: build_setting* bskun=nullptr; bool umount_kun_old; + bool umount_kun; enum show_config_type{ INIT=0, INSTALL=1, @@ -37,6 +41,9 @@ private: static void _msg_info(QString s); static void _msg_err(QString s); static void _msg_success(QString s); + static void _msg_info(QStringList s); + static void _msg_err(QStringList s); + static void _msg_success(QStringList s); int _chroot_init(); int _chroot_run(); int _pacman(QString ); @@ -49,13 +56,17 @@ private: void _mksignature(); void _checksum_common(QString) ; void _msg_infodbg(QString); + void _msg_infodbg(QStringList); int _mkairootfs_img_old(); int _mount_airootfs_old(); + int _mount_airootfs(); template int max_lenkun(LNKUN... args); template int max_lenkun_QString(LNKUNS... args); template void show_conf_l(int maxkun,void (*do_msgshow)(QString),SHOWVALKUN... txtargkun); template void show_conf_l(void (*do_msgshow)(QString),SHOWVALKUN... txtargkun); void _umount_airootfs_old(); + void _umount_airootfs(); + int _create_img_sys(); template void show_conf_dkun(void (*do_msgshow)(QString),SHOWVALKUN... argkun); QString img_name; static void stubkun(QString); diff --git a/system/cpp-src/mkalteriso/main.cpp b/system/cpp-src/mkalteriso/main.cpp index 9162ee8a..f41926d5 100644 --- a/system/cpp-src/mkalteriso/main.cpp +++ b/system/cpp-src/mkalteriso/main.cpp @@ -7,6 +7,7 @@ int main(int argc, char *argv[]) QTimer::singleShot(0,&m,SLOT(run())); int retkun= a.exec(); m.cmd_collect.force_umount_old(); + m.cmd_collect.force_umount(); return retkun; } bool isroot(){ -- 2.11.0