diff options
| author | Nippy <nippy@Nippy-Mac-mini.local> | 2026-10-09 10:49:26 +0200 |
|---|---|---|
| committer | Nippy <nippy@Nippy-Mac-mini.local> | 2026-10-09 10:49:26 +0200 |
| commit | 91978706279a19a3ac96393630876f3e50cbc518 (patch) | |
| tree | 1355da60486a305aefeea4e55543bbf1008715b3 /raveos-app-installer | |
| parent | 17a23f8a0cec5439d674d90c593497e4ceed2c68 (diff) | |
| download | RaveOS-PKGBUILD-91978706279a19a3ac96393630876f3e50cbc518.tar.gz RaveOS-PKGBUILD-91978706279a19a3ac96393630876f3e50cbc518.zip | |
fix
Diffstat (limited to 'raveos-app-installer')
40 files changed, 931 insertions, 89 deletions
diff --git a/raveos-app-installer/PKGBUILD b/raveos-app-installer/PKGBUILD index 4f36f0f..9371335 100644 --- a/raveos-app-installer/PKGBUILD +++ b/raveos-app-installer/PKGBUILD @@ -1,14 +1,8 @@ # Maintainer: nippy <nippy@tuta.io> -# -# raveos-app-installer -# --------------------- -# Egyetlen fájlos, letisztult PyQt6 alkalmazástelepítő (v3 architektúra): -# USER-ként fut (nem root), saját beépített jelszó-dialógus SUDO_ASKPASS-szal, -# NINCS pkexec/root-launcher. Váltja a régi, strukturált (src/) v2 architektúrát. pkgname=raveos-app-installer pkgver=3.1 -pkgrel=17 +pkgrel=18 pkgdesc="RaveOS graphical application installer" arch=('any') url="https://git.rp1.hu/RaveOS/raveos-app-installer" @@ -17,6 +11,9 @@ depends=('python' 'python-pyqt6' 'pacman' 'sudo') optdepends=( 'yay: AUR csomag támogatás' 'flatpak: flatpak alkalmazás támogatás' + 'sbsigntools: Secure Boot aláírás' + 'efitools: Secure Boot kulcs telepítés' + 'zstd: Secure Boot modul-aláírás' ) source=() sha256sums=() @@ -43,6 +40,16 @@ package() { install -Dm644 "${startdir}/raveos-app-installer.png" \ "${pkgdir}/usr/share/icons/hicolor/512x512/apps/raveos-app-installer.png" + install -Dm755 "${startdir}/raveos-secureboot-setup" \ + "${pkgdir}/usr/bin/raveos-secureboot-setup" + + install -d -m 755 "${pkgdir}/usr/share/raveos" + cp -r --no-preserve=ownership "${startdir}/secureboot" \ + "${pkgdir}/usr/share/raveos/" + find "${pkgdir}/usr/share/raveos/secureboot" -type d -exec chmod 755 {} + + find "${pkgdir}/usr/share/raveos/secureboot" -type f -exec chmod 644 {} + + chmod 755 "${pkgdir}/usr/share/raveos/secureboot/installed/"*.sh + cp -r --no-preserve=ownership "${startdir}/data" \ "${pkgdir}/usr/lib/raveos-app-installer/" find "${pkgdir}/usr/lib/raveos-app-installer/data" -type d -exec chmod 755 {} + diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/000003.log b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/000003.log deleted file mode 100644 index e69de29..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/000003.log +++ /dev/null diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/CURRENT b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/CURRENT deleted file mode 100644 index 7ed683d..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/CURRENT +++ /dev/null @@ -1 +0,0 @@ -MANIFEST-000001 diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOCK b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOCK deleted file mode 100644 index e69de29..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOCK +++ /dev/null diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG deleted file mode 100644 index 9003b5b..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG +++ /dev/null @@ -1,3 +0,0 @@ -2026/08/10-16:39:11.004 4839 Reusing MANIFEST /home/nippy/.config/BraveSoftware/Brave-Origin/Default/GCM Store/Encryption/MANIFEST-000001 -2026/08/10-16:39:11.004 4839 Recovering log #3 -2026/08/10-16:39:11.004 4839 Reusing old log /home/nippy/.config/BraveSoftware/Brave-Origin/Default/GCM Store/Encryption/000003.log diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG.old b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG.old deleted file mode 100644 index 70faec8..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/LOG.old +++ /dev/null @@ -1,2 +0,0 @@ -2026/08/10-16:34:19.532 3c24 Creating DB /home/nippy/.config/BraveSoftware/Brave-Origin/Default/GCM Store/Encryption since it was missing. -2026/08/10-16:34:19.547 3c24 Reusing MANIFEST /home/nippy/.config/BraveSoftware/Brave-Origin/Default/GCM Store/Encryption/MANIFEST-000001 diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/MANIFEST-000001 b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/MANIFEST-000001 Binary files differdeleted file mode 100644 index 18e5cab..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/GCM Store/Encryption/MANIFEST-000001 +++ /dev/null diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000004.log b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000004.log Binary files differdeleted file mode 100644 index 85386dc..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000004.log +++ /dev/null diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000005.ldb b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000005.ldb Binary files differdeleted file mode 100644 index c0a88d6..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/000005.ldb +++ /dev/null diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/CURRENT b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/CURRENT deleted file mode 100644 index 7ed683d..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/CURRENT +++ /dev/null @@ -1 +0,0 @@ -MANIFEST-000001 diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOCK b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOCK deleted file mode 100644 index e69de29..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOCK +++ /dev/null diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG deleted file mode 100644 index fb6f1ba..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG +++ /dev/null @@ -1,6 +0,0 @@ -2026/08/10-16:39:08.930 5 Reusing MANIFEST /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Local Storage/leveldb/MANIFEST-000001 -2026/08/10-16:39:08.933 5 Recovering log #3 -2026/08/10-16:39:08.933 5 Reusing old log /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Local Storage/leveldb/000003.log -2026/08/10-16:43:17.304 5 Level-0 table #5: started -2026/08/10-16:43:17.311 5 Level-0 table #5: 14577 bytes OK -2026/08/10-16:43:17.319 5 Delete type=0 #3 diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG.old b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG.old deleted file mode 100644 index b6dd490..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/LOG.old +++ /dev/null @@ -1,2 +0,0 @@ -2026/08/10-16:34:17.347 5 Creating DB /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Local Storage/leveldb since it was missing. -2026/08/10-16:34:17.368 5 Reusing MANIFEST /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Local Storage/leveldb/MANIFEST-000001 diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/MANIFEST-000001 b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/MANIFEST-000001 Binary files differdeleted file mode 100644 index 3ee7649..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Local Storage/leveldb/MANIFEST-000001 +++ /dev/null diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846059845116 b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846059845116 Binary files differdeleted file mode 100644 index dec2925..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846059845116 +++ /dev/null diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846351425167 b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846351425167 Binary files differdeleted file mode 100644 index d6b6802..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Session_13430846351425167 +++ /dev/null diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Tabs_13430846351524548 b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Tabs_13430846351524548 Binary files differdeleted file mode 100644 index 9338aab..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sessions/Tabs_13430846351524548 +++ /dev/null diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/000003.log b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/000003.log Binary files differdeleted file mode 100644 index 4a8e04e..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/000003.log +++ /dev/null diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/CURRENT b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/CURRENT deleted file mode 100755 index 7ed683d..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/CURRENT +++ /dev/null @@ -1 +0,0 @@ -MANIFEST-000001 diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOCK b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOCK deleted file mode 100755 index e69de29..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOCK +++ /dev/null diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG deleted file mode 100644 index 5955bbb..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG +++ /dev/null @@ -1,3 +0,0 @@ -2026/08/10-16:39:08.921 4825 Reusing MANIFEST /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Sync Data/LevelDB/MANIFEST-000001 -2026/08/10-16:39:08.921 4825 Recovering log #3 -2026/08/10-16:39:08.922 4825 Reusing old log /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Sync Data/LevelDB/000003.log diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG.old b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG.old deleted file mode 100644 index 2a0eaa5..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/08/10-16:34:17.339 3c10 Reusing MANIFEST /home/nippy/.config/BraveSoftware/Brave-Origin/Default/Sync Data/LevelDB/MANIFEST-000001 diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/MANIFEST-000001 b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/MANIFEST-000001 Binary files differdeleted file mode 100755 index 18e5cab..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default/Sync Data/LevelDB/MANIFEST-000001 +++ /dev/null diff --git a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Local State b/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Local State deleted file mode 100644 index 6221116..0000000 --- a/raveos-app-installer/data/configs/com.brave.Browser/config/BraveSoftware/Brave-Browser/Local State +++ /dev/null @@ -1 +0,0 @@ -{"autofill":{"ablation_seed":"AZXVsIGW7us="},"brave":{"ad_block":{"checked_all_default_regions":true},"brave_search_conversion":{"already_churned":true},"core_metrics":{"pages_loaded":[{"day":1786312800.0,"value":2.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}]},"enable_search_suggestions_by_default":true,"migrated_adblock_social_media_blocking_settings":true,"misc_metrics":{"brave_search_query_counts":{"any_navigation":true},"brave_search_report_frame_start_time":"13430846057347621","combined_search_study_frame_start_time":"13430846057347632","combined_search_study_search_made":true,"failed_https_upgrade_metric_added_time":"13426552800000000","last_doh_fallback":0,"media_session_active_process_time":"450000000","media_session_frame_start_time":"13430846057232046","media_session_playing_time":"0","menu_dismiss_storage":[{"day":1786312800.0,"value":2.0}],"menu_group_actions":{"browser_views":4.0},"menu_shown_storage":[{"day":1786312800.0,"value":6.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}],"nav_source_counts":{"top_sites_favorites":1,"total":2},"nav_source_report_frame_start_time":"13430846057347627","total_dns_requests":[{"day":1786312800.0,"value":32.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}],"uptime_frame_start_time_v2":"13430846057427398","uptime_sum":"414342363","weekly_uptime_storage":[{"day":1786312800.0,"value":408.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}]},"new_tab_page":{"customize_p3a_usage":0,"p3a_new_tabs_created":[{"day":1786312800.0,"value":9.0},{"day":1786226400.0,"value":0.0},{"day":1786140000.0,"value":0.0},{"day":1786053600.0,"value":0.0},{"day":1785967200.0,"value":0.0},{"day":1785880800.0,"value":0.0},{"day":1785794400.0,"value":0.0}]},"onboarding":{"last_shields_icon_highlighted_time":"13430846567528190"},"origin":{"free_tier_accepted":true,"policies_were_enforced":true,"purchase_validated":true},"p3a":{"notice_acknowledged":true},"referral":{"initialization":true,"promo_code":"BRV001"},"search":{"backup_results":{"last_view_height":921,"last_view_width":1608},"last_switch_report":"13430846922639013"},"sidebar":{"target_user_for_sidebar_enabled_test":false}},"brave_shields":{"p3a_usage":0},"breadcrumbs":{"enabled":false,"enabled_time":"13430846057297325"},"browser":{"first_run_finished":true,"whats_new":{"enabled_order":[]}},"hardware_acceleration_mode_previous":true,"legacy":{"profile":{"name":{"migrated":true}}},"local":{"password_hash_data_list":[]},"management":{"platform":{"last_log_time":"13430846057341258"}},"network_time":{"network_time_mapping":{"local":1.786372749129309e+12,"network":1.78637275e+12,"ticks":1760881923.0,"uncertainty":1223261.0}},"optimization_guide":{"model_execution":{"last_usage_by_feature":{}},"model_store_metadata":{},"on_device":{"last_version":"151.1.93.135","model_crash_count":0}},"os_crypt":{"portal":{"prev_desktop":"GNOME","prev_init_success":true}},"p3a":{"activation_dates":{},"custom_attributes":{"media_session_usage":"0","search_default":"other"}},"performance_intervention":{"last_daily_sample":"13430846057426803"},"policy":{"last_statistics_update":"13430846057296519"},"profile":{"info_cache":{"Default":{"active_time":1786372457.423897,"ai_subscription_tier":0,"avatar_icon":"chrome://theme/IDR_PROFILE_AVATAR_26","background_apps":false,"default_avatar_fill_color":-14737629,"default_avatar_stroke_color":-526345,"enterprise_label":"","force_signin_profile_locked":false,"gaia_id":"","is_consented_primary_account":false,"is_ephemeral":false,"is_using_default_avatar":true,"is_using_default_name":true,"managed_user_id":"","metrics_bucket_index":1,"name":"Personal","profile_color_seed":-4078337,"profile_highlight_color":-14737629,"serp_metrics":{"brave_search_engine":[{"day":1782086400.0,"value":1.0}],"google_search_engine":[],"other_search_engine":[]},"signin.with_credential_provider":false,"user_name":""}},"last_active_profiles":["Default"],"metrics":{"next_bucket_index":2},"profile_counts_reported":"13430846057298079","profiles_order":["Default"]},"session_id_generator_last_value":"744144003","signin":{"active_accounts_last_emitted":"13430846057231733"},"subresource_filter":{"ruleset_version":{"checksum":0,"content":"","format":0}},"tab_stats":{"discards_external":0,"discards_frozen":0,"discards_proactive":0,"discards_suggested":0,"discards_urgent":0,"last_daily_sample":"13430846057293858","max_tabs_per_window":2,"reloads_external":0,"reloads_frozen":0,"reloads_proactive":0,"reloads_suggested":0,"reloads_urgent":0,"total_tab_count_max":2,"window_count_max":1},"ukm":{"persisted_logs":[]},"uninstall_metrics":{"installation_date2":"1782154367"},"updateclientdata":{"apps":{"adcocjohghhfpidemphmcmlmhnfgikei":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.469","pf":"53c03b89-69c8-4e01-a7c7-3e2d264931b6","pv":"1.0.475"},"afalakplffnnnlkncjhbmahjfjhmlkal":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.1468","pf":"0b6666c5-d270-441f-9da0-502be3538c5a","pv":"1.0.1503"},"aoojcmojmmcbpfgoecoadbdpnagfchel":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.23","pf":"26e5e602-358c-4152-8cc2-c19180622adb","pv":"1.0.24"},"bfpgedeaaibpoidldhjcknekahbikncb":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.16863","pf":"a55c4105-9171-4c4d-9ffb-dd77a5ecad08","pv":"1.0.16874"},"cdbbhgbmjhfnhnmgeddbliobbofkgdhe":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.19761","pf":"3b563fca-6ed0-4214-955e-2cde31e60990","pv":"1.0.19908"},"cemdlagocoimleflkfkjoihojfainiho":{"dlrc":7161,"fp":"","installdate":7161,"max_pv":"0.0.0.0","pf":"045b2476-4387-4d4a-a4a7-a927f432cdd7","pv":"1.0.119"},"dkpggglmbjhgjhachikgmohmecomjndo":{"dlrc":7161,"fp":"","installdate":7161,"max_pv":"0.0.0.0","pf":"11f5d842-511c-4b29-b3a7-c745e12eca8c","pv":"1.0.0"},"efniojlnjndmcbiieegkicadnoecjjef":{"cohort":"1:18ql:","cohortname":"Auto Stage3","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"529f8cdb-e88a-4c05-a107-7b32c7ede605","pv":"1738"},"ggkkehgbnfjpeggfpleeakpidbkibbmn":{"cohort":"1:ut9/1a0f:","cohortname":"M108 and Above","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"a966c7a8-01ad-4d44-b2bc-499dd8d0379e","pv":"2026.8.10.62"},"giekcmmlnklenlaomppkphknjmnnpneh":{"cohort":"1:j5l:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"68e29660-4e5c-476a-9df2-4ab5609a6837","pv":"7"},"gkboaolpopklhgplhaaiboijnklogmbc":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.92","pf":"637e0dec-18ab-4c68-8b8e-673923451f03","pv":"1.0.95"},"hfnkpimlhhgieaddgfemjhofmfblmnib":{"cohort":"1:287f:","cohortname":"Auto full","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"08755607-b47c-4507-b276-7e0d20b4c6d1","pv":"10706"},"iodkpdagapdfkphljnddpjlldadblomo":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.20458","pf":"4b5131c9-5159-4342-85b8-9cac7d2cb47b","pv":"1.0.21487"},"jamhcnnkihinmdlkakkaopbjbbcngflc":{"cohort":"1:wvr:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"83349149-1b15-47a7-98cc-423150c9f434","pv":"120.0.6050.0"},"jflookgnkcckhobaglndicnbbgbonegd":{"cohort":"1:s7x:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"7f7dbae9-cedd-47ef-8436-09b0b1043ab0","pv":"3091"},"jmfhneobcdckobmonkfjkbknnjjnegoh":{"dlrc":7161,"fp":"","installdate":7161,"max_pv":"0.0.0.0","pf":"96e0b450-03c8-4c9d-9794-8f30e89125ed","pv":"1.0.0"},"khaoiebndkojlmppeemjhbpbandiljpe":{"cohort":"1:cux:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"1f6c2599-ba72-4da7-ac54-c3d124fc5abd","pv":"145.0.7584.0"},"kihnoaefogbkmblfimmibknnmkllbhlf":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.6038","pf":"3a6c7af8-9f85-4261-9931-2a6017fc3677","pv":"1.0.7064"},"laoigpblnllgcgjnjnllmfolckpjlhki":{"cohort":"1:10zr:","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.7.1652906823","pf":"486a20ef-2770-47a7-8e84-d3885356fd6b","pv":"1.1.0.3"},"mfddibmblmbccpadfndgakiopmmhebop":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.146","pf":"ecb74f41-79cb-4d47-b13f-7266767415ff","pv":"1.0.151"},"nlpaeekllejnmhoonlpcefpfnpbajbpe":{"dlrc":7161,"fp":"","installdate":7112,"max_pv":"1.0.474","pf":"fdf405e3-c653-4583-8419-ddcebe0c86ef","pv":"1.0.523"},"obedbbhbpmojnkanicioggnmelmoomoc":{"cohort":"1:s6f:3cr3@0.025","cohortname":"Auto","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"ae14957e-6c26-4a07-979c-56bab97c3079","pv":"20251024.824731831.14"},"ojhpjlocmbogdgmfpkhlaaeamibhnphh":{"cohort":"1:w0x:","cohortname":"All users","dlrc":7161,"fp":"","installdate":7112,"max_pv":"0.0.0.0","pf":"04c2193a-f501-4e3a-8820-33ce4ce897bd","pv":"3"}}},"user_experience_metrics":{"consent_restructure_feature_state":false,"limited_entropy_randomization_source":"FE1EA34EA9F364323DD20A35BACD50D5","low_entropy_source3":7377,"pseudo_low_entropy_source":4436,"reporting_enabled":false,"session_id":2,"stability":{"browser_last_live_timestamp":"13430847055374029","exited_cleanly":true,"stats_buildtime":"1786293927","stats_version":"151.1.93.135-64-devel"}},"variations_compressed_seed":"safe_seed_content","variations_country":"hu","variations_crash_streak":0,"variations_failed_to_fetch_seed_streak":0,"variations_geo_level1":"","variations_last_fetch_time":"13430846349237474","variations_permanent_consistency_country":["151.1.93.135","hu"],"variations_safe_compressed_seed":"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","variations_safe_seed_date":"13430846058000000","variations_safe_seed_fetch_time":"13430846349237474","variations_safe_seed_locale":"hu","variations_safe_seed_milestone":151,"variations_safe_seed_permanent_consistency_country":"hu","variations_safe_seed_session_consistency_country":"hu","variations_safe_seed_signature":"MEQCH06dZwKnrjD5NL4zslyMi59lH20U7fqZSfZJH2VPfOwCIQCG/LHBShHWAfuJsuTlUbaiyJabmlDZE+AeUtyI3q/k3Q==","variations_seed_date":"13430846350000000","variations_seed_milestone":151,"variations_seed_serial_number":"23d76df102c70f19dab8794bc52a53af","variations_seed_signature":"MEQCH06dZwKnrjD5NL4zslyMi59lH20U7fqZSfZJH2VPfOwCIQCG/LHBShHWAfuJsuTlUbaiyJabmlDZE+AeUtyI3q/k3Q==","variations_sticky_studies":"","was":{"restarted":false}}
\ No newline at end of file diff --git a/raveos-app-installer/raveos-app-installer.py b/raveos-app-installer/raveos-app-installer.py index d5a9149..d696a58 100644 --- a/raveos-app-installer/raveos-app-installer.py +++ b/raveos-app-installer/raveos-app-installer.py @@ -31,15 +31,11 @@ import subprocess import sys from pathlib import Path -# ───────────────────────────────────────────────────────────────────────────── -# Konstansok / útvonalak -# ───────────────────────────────────────────────────────────────────────────── APP_NAME = "RaveOS App Installer" APP_ID = "raveos-app-installer" # Wayland app_id (Hyprland window rule-okhoz) APP_VERSION = "3.1" -# app-list.json keresési sorrend: a script mellett -> /usr/share -> ~/.config _SCRIPT_DIR = Path(__file__).resolve().parent APP_LIST_CANDIDATES = [ _SCRIPT_DIR / "app-list.json", @@ -47,9 +43,6 @@ APP_LIST_CANDIDATES = [ Path.home() / ".config" / "raveos" / "app-list.json", ] -# ───────────────────────────────────────────────────────────────────────────── -# Téma (a welcome app stílusa) -# ───────────────────────────────────────────────────────────────────────────── C = { "bg": "#232427", @@ -68,7 +61,6 @@ C = { "danger_hi": "#c56458", } -# Per-type kis badge színek (visszafogottak) TYPE_LABEL = { "pacman": "pacman", "aur": "AUR", @@ -79,9 +71,6 @@ TYPE_LABEL = { } -# ───────────────────────────────────────────────────────────────────────────── -# Nyelv (hu/en) - session-szintű, alapértelmezett hu, a welcome app mintájára -# ───────────────────────────────────────────────────────────────────────────── _current_lang = "hu" @@ -90,6 +79,30 @@ T = { "header_backup": {"hu": " · MENTÉS / VISSZAÁLLÍTÁS", "en": " · BACKUP / RESTORE"}, "nav_backup": {"hu": "Mentés / Visszaállítás", "en": "Backup / Restore"}, "nav_back": {"hu": "← Vissza", "en": "← Back"}, + "nav_sb": {"hu": "Secure Boot", "en": "Secure Boot"}, + "header_sb": {"hu": " · SECURE BOOT", "en": " · SECURE BOOT"}, + "sb_desc": {"hu": "A telepített rendszer aláírása és a kulcsok telepítése a firmware-be.\nWindows dual-boot mellett is biztonságos (Microsoft kulcsok megőrizve).", "en": "Sign the installed system and enroll the keys into the firmware.\nSafe with dual-boot Windows (Microsoft keys preserved)."}, + "sb_lbl_sb": {"hu": "Secure Boot", "en": "Secure Boot"}, + "sb_lbl_setup": {"hu": "Setup Mode", "en": "Setup Mode"}, + "sb_lbl_keys": {"hu": "Gépkulcs", "en": "Machine key"}, + "sb_lbl_signed": {"hu": "Aláírások", "en": "Signatures"}, + "sb_val_on": {"hu": "bekapcsolva", "en": "enabled"}, + "sb_val_off": {"hu": "kikapcsolva", "en": "disabled"}, + "sb_val_yes": {"hu": "igen", "en": "yes"}, + "sb_val_no": {"hu": "nem", "en": "no"}, + "sb_val_ok": {"hu": "rendben", "en": "ok"}, + "sb_val_missing": {"hu": "hiányzik", "en": "missing"}, + "sb_btn_refresh": {"hu": "Állapot frissítése", "en": "Refresh status"}, + "sb_btn_setup": {"hu": "Secure Boot beállítása", "en": "Set up Secure Boot"}, + "sb_btn_resign": {"hu": "Újra-aláírás", "en": "Re-sign"}, + "sb_pending": {"hu": "Újraindítás szükséges a befejezéshez!", "en": "Reboot required to finish!"}, + "sb_bl_warn": {"hu": "BitLocker: ha Windows-on be van kapcsolva, előbb indítsd el a Windowst és futtasd: manage-bde -protectors -disable C: -rebootcount 2 — vagy legyen kéznél a helyreállítási kulcs.", "en": "BitLocker: if enabled on Windows, boot Windows first and run: manage-bde -protectors -disable C: -rebootcount 2 — or have the recovery key ready."}, + "sb_done_title": {"hu": "Secure Boot beállítva", "en": "Secure Boot configured"}, + "sb_done_msg": {"hu": "Az aláírások és a kulcsok készen vannak.\n\nA BIOS-ban állítsd: Secure Boot → Enabled, majd indítsd újra a gépet.", "en": "Signatures and keys are ready.\n\nIn the BIOS set: Secure Boot → Enabled, then reboot."}, + "sb_reboot_title": {"hu": "Újraindítás szükséges", "en": "Reboot required"}, + "sb_reboot_msg": {"hu": "A BIOS-ban töröld a Secure Boot kulcsokat (Clear Secure Boot keys → Setup Mode).\nMentés után indítsd újra a gépet — a beállítás boot után automatikusan befejeződik.\n\nÚjraindítsam most?", "en": "In the BIOS clear the Secure Boot keys (Clear Secure Boot keys → Setup Mode).\nSave and reboot — the setup finishes automatically after boot.\n\nReboot now?"}, + "sb_err_title": {"hu": "Secure Boot hiba", "en": "Secure Boot error"}, + "sb_err_msg": {"hu": "A művelet nem sikerült — a részletek a naplóban láthatók.", "en": "The operation failed — details are in the log."}, "tab_all": {"hu": "Összes", "en": "All"}, "tab_installed": {"hu": "Telepített", "en": "Installed"}, "search_placeholder": {"hu": "Keresés…", "en": "Search…"}, @@ -296,9 +309,6 @@ def build_qss() -> str: """ -# ───────────────────────────────────────────────────────────────────────────── -# Adat: katalógus betöltés + telepítettség detektálás -# ───────────────────────────────────────────────────────────────────────────── def load_catalog() -> list: """app-list.json beolvasása az első létező útvonalról.""" @@ -368,9 +378,6 @@ def is_installed(app: dict, idx: dict) -> bool: return False -# ───────────────────────────────────────────────────────────────────────────── -# Parancs-építés (telepítés / eltávolítás), batch-elve backendenként -# ───────────────────────────────────────────────────────────────────────────── def _root_prefix(gui: bool) -> list: """GUI -> sudo -S (jelszó stdin-ről), terminál -> sudo, ha már root -> semmi.""" @@ -419,8 +426,6 @@ def plan_commands(apps: list, install: bool, gui: bool) -> list: if aur: if install: - # --answer* nelkul a yay a PKGBUILD-diff/edit prompt-nal orokre - # varakozik (nincs csatolt terminal a stream_command-hoz) steps.append((f"AUR: {', '.join(aur)}", ["yay", "-S", "--needed", "--noconfirm", "--answerclean", "None", "--answerdiff", "None", @@ -447,10 +452,6 @@ def plan_commands(apps: list, install: bool, gui: bool) -> list: steps.append((f"flatpak uninstall: {fid}", ["flatpak", "uninstall", "--user", "-y", fid])) - # Config seedelés: pacman/aur/flatpak-user tipusu appoknal a config_dir/ - # config_dest mezok alapjan bemasoljuk az elore elkeszitett configot a - # user home-jaba, telepites utan. (script tipusnal ezt a sajat bash - # script intezi, azoknal nem kell ez a lepes.) if install: _home = os.path.expanduser("~") for a in apps: @@ -471,10 +472,6 @@ def plan_commands(apps: list, install: bool, gui: bool) -> list: f"cp {cp_flag} {shlex.quote(str(src))}/. {shlex.quote(dest)}/ && " f"rm -f {shlex.quote(dest)}/Singleton*"])) - # Config seedelés (több-utas változat): olyan appoknal, ahol tobb kulon - # forras/cel par van (pl. PhotoGIMP: GIMP config + .desktop + ikonok - # kulon-kulon helyre), a "config_mappings" listat hasznaljuk a fenti - # egyszeru config_dir/config_dest helyett. if install: _home = os.path.expanduser("~") for a in apps: @@ -496,7 +493,6 @@ def plan_commands(apps: list, install: bool, gui: bool) -> list: f"cp {cp_flag} {shlex.quote(str(src))}/. {shlex.quote(dest)}/ && " f"rm -f {shlex.quote(dest)}/Singleton*"])) - # Script env: a szkript tudja ki a tényleges user (sudo után root fut) _caller = os.environ.get("USER") or os.environ.get("LOGNAME") or "" _caller_home = os.path.expanduser("~") _caller_uid = str(os.getuid()) @@ -547,9 +543,6 @@ def stream_command(label: str, cmd: list, emit, password: str = "") -> bool: return ok -# ───────────────────────────────────────────────────────────────────────────── -# GUI rész (csak ha van PyQt6 / display) -# ───────────────────────────────────────────────────────────────────────────── BACKUP_LIST_CANDIDATES = [ _SCRIPT_DIR / "data/backup/backup-paths.json", @@ -578,7 +571,6 @@ def run_gui() -> int: from PyQt6.QtCore import Qt, QThread, pyqtSignal from PyQt6.QtGui import QFont, QFontDatabase - # ── display font helper (Bebas Neue, fallbackkel) ──────────────────────── def display_font(size: int, weight=QFont.Weight.Normal) -> QFont: for fam in ("Bebas Neue", "Oswald", "Anton"): if fam in QFontDatabase.families(): @@ -591,7 +583,6 @@ def run_gui() -> int: f.setLetterSpacing(QFont.SpacingType.PercentageSpacing, 102) return f - # ── háttér worker ──────────────────────────────────────────────────────── class Worker(QThread): log = pyqtSignal(str) progress = pyqtSignal(int) # 0..100 @@ -613,7 +604,6 @@ def run_gui() -> int: self.progress.emit(int((i + 1) / total * 100)) self.done.emit(ok, total) - # ── egy app sor widget ─────────────────────────────────────────────────── class Row(QFrame): def __init__(self, app, installed): super().__init__() @@ -652,7 +642,6 @@ def run_gui() -> int: f"color:{C['accent_hi'] if installed else C['text_mut']}; font-size:12px;") lay.addWidget(status) - # sorra kattintás is váltja a checkboxot (message tipusnal dialogot mutat) self.setCursor(Qt.CursorShape.PointingHandCursor) def mousePressEvent(self, e): @@ -664,7 +653,34 @@ def run_gui() -> int: self.cb.toggle() super().mousePressEvent(e) - # ── backup worker ──────────────────────────────────────────────────────── + class SbWorker(QThread): + log = pyqtSignal(str) + done = pyqtSignal(int) + + def __init__(self, mode, password): + super().__init__() + self.mode = mode + self.password = password + + def run(self): + cmd = ["sudo", "-S", "-p", "", "raveos-secureboot-setup", self.mode] + self.log.emit(f"$ {' '.join(cmd)}") + try: + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, + stdin=subprocess.PIPE, text=True, bufsize=1) + if self.password: + proc.stdin.write(self.password + "\n") + proc.stdin.flush() + proc.stdin.close() + except OSError as exc: + self.log.emit(f"[HIBA] {exc}") + self.done.emit(1) + return + for line in proc.stdout: + self.log.emit(line.rstrip("\n")) + proc.wait() + self.done.emit(proc.returncode) + class BackupWorker(QThread): log = pyqtSignal(str) progress = pyqtSignal(int) @@ -792,7 +808,6 @@ def run_gui() -> int: except Exception as exc: self.done.emit(False, str(exc)) - # ── fő ablak ───────────────────────────────────────────────────────────── class Main(QMainWindow): def __init__(self, catalog): super().__init__() @@ -801,6 +816,7 @@ def run_gui() -> int: self.idx = installed_index() self.rows = [] self.worker = None + self.sb_worker = None self.backup_worker = None self.backup_checkboxes = {} # item_id -> (QCheckBox, abs_path, label, requires_root) self._sudo_pw = "" @@ -815,7 +831,6 @@ def run_gui() -> int: outer.setContentsMargins(0, 0, 0, 0) outer.setSpacing(0) - # ── Header ─────────────────────────────────────────────────────── header = QFrame() header.setObjectName("Header") hl = QHBoxLayout(header) @@ -852,6 +867,11 @@ def run_gui() -> int: self._style_lang_btns() hl.addSpacing(12) + self.btn_sb = QPushButton(tr("nav_sb")) + self.btn_sb.clicked.connect(self._go_sb) + hl.addWidget(self.btn_sb) + hl.addSpacing(8) + self.btn_nav = QPushButton(tr("nav_backup")) self.btn_nav.clicked.connect(self._go_backup) hl.addWidget(self.btn_nav) @@ -861,11 +881,9 @@ def run_gui() -> int: hl.addWidget(ver) outer.addWidget(header) - # ── Stack ───────────────────────────────────────────────────────── self.stack = QStackedWidget() outer.addWidget(self.stack, 1) - # ── Oldal 0: Apps ───────────────────────────────────────────────── apps_page = QWidget() bl = QVBoxLayout(apps_page) bl.setContentsMargins(20, 16, 20, 16) @@ -935,7 +953,6 @@ def run_gui() -> int: self.stack.addWidget(apps_page) - # ── Oldal 1: Backup / Restore ───────────────────────────────────── bk_page = QWidget() bbl = QVBoxLayout(bk_page) bbl.setContentsMargins(20, 16, 20, 16) @@ -987,10 +1004,75 @@ def run_gui() -> int: self.stack.addWidget(bk_page) + sb_page = QWidget() + sbl = QVBoxLayout(sb_page) + sbl.setContentsMargins(20, 16, 20, 16) + sbl.setSpacing(12) + + self.sb_desc = QLabel(tr("sb_desc")) + self.sb_desc.setWordWrap(True) + self.sb_desc.setStyleSheet(f"color:{C['text_dim']};") + sbl.addWidget(self.sb_desc) + + self.sb_lbls = {} + self.sb_vals = {} + srow1 = QHBoxLayout() + srow1.setSpacing(8) + srow2 = QHBoxLayout() + srow2.setSpacing(8) + for i, key in enumerate(("sb_lbl_sb", "sb_lbl_setup", "sb_lbl_keys", "sb_lbl_signed")): + lbl = QLabel(tr(key)) + lbl.setStyleSheet(f"color:{C['text_dim']};") + val = QLabel("-") + val.setStyleSheet(f"color:{C['text']}; font-weight:600;") + self.sb_lbls[key] = lbl + self.sb_vals[key] = val + box = QHBoxLayout() + box.setSpacing(6) + box.addWidget(lbl) + box.addWidget(val) + (srow1 if i < 2 else srow2).addLayout(box) + (srow1 if i < 2 else srow2).addSpacing(24) + srow1.addStretch(1) + srow2.addStretch(1) + sbl.addLayout(srow1) + sbl.addLayout(srow2) + + self.sb_warn = QLabel(tr("sb_bl_warn")) + self.sb_warn.setWordWrap(True) + self.sb_warn.setStyleSheet("color:#d0a24c;") + sbl.addWidget(self.sb_warn) + + self.sb_pending = QLabel(tr("sb_pending")) + self.sb_pending.setStyleSheet("color:#d0a24c; font-weight:700;") + self.sb_pending.hide() + sbl.addWidget(self.sb_pending) + + sb_row = QHBoxLayout() + sb_row.setSpacing(8) + self.btn_sb_refresh = QPushButton(tr("sb_btn_refresh")) + self.btn_sb_refresh.clicked.connect(self._sb_refresh) + self.btn_sb_setup = QPushButton(tr("sb_btn_setup")) + self.btn_sb_setup.setObjectName("Primary") + self.btn_sb_setup.clicked.connect(self._sb_setup) + self.btn_sb_resign = QPushButton(tr("sb_btn_resign")) + self.btn_sb_resign.clicked.connect(self._sb_resign) + sb_row.addWidget(self.btn_sb_refresh) + sb_row.addWidget(self.btn_sb_setup) + sb_row.addWidget(self.btn_sb_resign) + sb_row.addStretch(1) + sbl.addLayout(sb_row) + + self.sb_log = QPlainTextEdit() + self.sb_log.setObjectName("Log") + self.sb_log.setReadOnly(True) + sbl.addWidget(self.sb_log, 1) + + self.stack.addWidget(sb_page) + self.build_rows() self.apply_filter() - # ── nyelv ───────────────────────────────────────────────────────────── def _style_lang_btns(self): active = ( f"QPushButton {{ background: {C['accent']}; color: #15240f;" @@ -1016,9 +1098,23 @@ def run_gui() -> int: self._retranslate_all() def _retranslate_all(self): - on_backup = self.stack.currentIndex() == 1 - self.header_sep.setText(tr("header_backup") if on_backup else tr("header_installer")) - self.btn_nav.setText(tr("nav_back") if on_backup else tr("nav_backup")) + idx = self.stack.currentIndex() + if idx == 1: + self.header_sep.setText(tr("header_backup")) + elif idx == 2: + self.header_sep.setText(tr("header_sb")) + else: + self.header_sep.setText(tr("header_installer")) + self.btn_nav.setText(tr("nav_back") if idx != 0 else tr("nav_backup")) + self.btn_sb.setText(tr("nav_sb")) + self.sb_desc.setText(tr("sb_desc")) + for key, lbl in self.sb_lbls.items(): + lbl.setText(tr(key)) + self.sb_warn.setText(tr("sb_bl_warn")) + self.sb_pending.setText(tr("sb_pending")) + self.btn_sb_refresh.setText(tr("sb_btn_refresh")) + self.btn_sb_setup.setText(tr("sb_btn_setup")) + self.btn_sb_resign.setText(tr("sb_btn_resign")) self.tab_all.setText(tr("tab_all")) self.tab_inst.setText(tr("tab_installed")) self.search.setPlaceholderText(tr("search_placeholder")) @@ -1042,7 +1138,6 @@ def run_gui() -> int: self.scroll.verticalScrollBar().setValue(keep_scroll) self.build_backup_items() - # ── backup lista építés (nyelvváltáskor is újraépül) ──────────────────── def build_backup_items(self): prev_checked = {iid: cb.isChecked() for iid, (cb, _, _, _) in self.backup_checkboxes.items()} while self.bk_vl.count(): @@ -1098,13 +1193,11 @@ def run_gui() -> int: self.bk_vl.addWidget(brow) self.bk_vl.addStretch(1) - # ── frissítés ───────────────────────────────────────────────────────── def _refresh_and_filter(self): self.idx = installed_index() self.build_rows() self.apply_filter() - # ── navigáció ───────────────────────────────────────────────────────── def _go_backup(self): self.stack.setCurrentIndex(1) self.header_sep.setText(tr("header_backup")) @@ -1119,7 +1212,99 @@ def run_gui() -> int: self.btn_nav.clicked.disconnect() self.btn_nav.clicked.connect(self._go_backup) - # ── lista építés ────────────────────────────────────────────────────── + def _go_sb(self): + self.stack.setCurrentIndex(2) + self.header_sep.setText(tr("header_sb")) + self.btn_nav.setText(tr("nav_back")) + self.btn_nav.clicked.disconnect() + self.btn_nav.clicked.connect(self._go_apps) + self._sb_refresh() + + def _sb_refresh(self): + self.sb_log.clear() + import time + out = "" + cached = self._sudo_pw if (self._sudo_pw and (time.time() - self._sudo_pw_ts) < 300) else "" + try: + for cmd in (["raveos-secureboot-setup", "--status"], + ["sudo", "-n", "raveos-secureboot-setup", "--status"]): + res = subprocess.run(cmd, capture_output=True, text=True, timeout=15) + out = res.stdout + if out.strip(): + break + if not out.strip() and cached: + res = subprocess.run(["sudo", "-S", "-p", "", "raveos-secureboot-setup", "--status"], + input=cached + "\n", capture_output=True, text=True, timeout=15) + out = res.stdout + except (OSError, subprocess.TimeoutExpired) as exc: + self.sb_log.appendPlainText(f"[HIBA] {exc}") + return + data = {} + for line in out.splitlines(): + if "=" in line and not line.startswith("["): + k, _, val = line.partition("=") + data[k.strip()] = val.strip() + elif line.strip(): + self.sb_log.appendPlainText(line) + if not data: + if not out.strip(): + self.sb_log.appendPlainText("[raveos-sb] Az allapot nem olvashato.") + return + on = lambda x: tr("sb_val_on") if x == "1" else tr("sb_val_off") + yes = lambda x: tr("sb_val_yes") if x == "1" else tr("sb_val_no") + ok = lambda x: tr("sb_val_ok") if x == "1" else tr("sb_val_missing") + self.sb_vals["sb_lbl_sb"].setText(on(data.get("secureboot", "?"))) + self.sb_vals["sb_lbl_setup"].setText(yes(data.get("setupmode", "?"))) + self.sb_vals["sb_lbl_keys"].setText(ok(data.get("keys", "0"))) + self.sb_vals["sb_lbl_signed"].setText(ok(data.get("signed", "0"))) + self.sb_pending.setVisible(data.get("pending") == "1") + + def _sb_run(self, mode): + if self.sb_worker and self.sb_worker.isRunning(): + return + import time + if os.geteuid() != 0: + if self._sudo_pw and (time.time() - self._sudo_pw_ts) < 300: + password = self._sudo_pw + else: + password = self._ask_password() + if not password: + return + self._sudo_pw = password + self._sudo_pw_ts = time.time() + else: + password = "" + self.sb_log.clear() + self.btn_sb_setup.setEnabled(False) + self.btn_sb_resign.setEnabled(False) + self.btn_sb_refresh.setEnabled(False) + self.sb_worker = SbWorker(mode, password) + self.sb_worker.log.connect(self.sb_log.appendPlainText) + self.sb_worker.done.connect(self._sb_finished) + self.sb_worker.start() + + def _sb_setup(self): + self._sb_run("--setup") + + def _sb_resign(self): + self._sb_run("--resign") + + def _sb_finished(self, rc): + self.btn_sb_setup.setEnabled(True) + self.btn_sb_resign.setEnabled(True) + self.btn_sb_refresh.setEnabled(True) + self._sb_refresh() + if rc == 0: + QMessageBox.information(self, tr("sb_done_title"), tr("sb_done_msg")) + elif rc == 10: + answer = QMessageBox.question( + self, tr("sb_reboot_title"), tr("sb_reboot_msg"), + QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No) + if answer == QMessageBox.StandardButton.Yes: + subprocess.Popen(["systemctl", "reboot"]) + else: + QMessageBox.critical(self, tr("sb_err_title"), tr("sb_err_msg")) + def build_rows(self): for r in self.rows: r.setParent(None) @@ -1154,7 +1339,6 @@ def run_gui() -> int: return [r.app for r in self.rows if r.cb.isChecked() and r.isVisible() and not r.is_message] - # ── app akció ───────────────────────────────────────────────────────── def _ask_password(self) -> str: """Jelszó dialog - egyszer fut az akció elején. Üres string = megszakítva.""" err_msg = "" @@ -1221,7 +1405,6 @@ def run_gui() -> int: return pw err_msg = tr("dlg_pw_wrong_err") except Exception: - # Ha az ellenőrzés nem sikerül, elfogadjuk és hagyjuk a parancsot hibázni return pw def run_action(self, install: bool): @@ -1236,7 +1419,6 @@ def run_gui() -> int: self.log.appendPlainText(tr("log_nothing_to_do")) return - # Jelszó - 5 percen belül megjegyzett jelszót újra felhasználjuk import time if os.geteuid() != 0: if self._sudo_pw and (time.time() - self._sudo_pw_ts) < 300: @@ -1281,7 +1463,6 @@ def run_gui() -> int: self.search.setEnabled(not busy) self.cat.setEnabled(not busy) - # ── backup akciók ───────────────────────────────────────────────────── def _bk_browse(self): path, _ = QFileDialog.getSaveFileName( self, tr("filedialog_caption"), str(Path.home()), "Tar archive (*.tar.gz)") @@ -1365,7 +1546,6 @@ def run_gui() -> int: self.bk_log.appendPlainText(f"\n{tr('bk_result_ok') if ok else tr('bk_result_err')}: {msg}") self._bk_set_busy(False) - # ── alkalmazás bootstrap ───────────────────────────────────────────────── if shutil.which("hyprctl"): subprocess.run( ["hyprctl", "keyword", "windowrulev2", @@ -1390,9 +1570,6 @@ def run_gui() -> int: return app.exec() -# ───────────────────────────────────────────────────────────────────────────── -# CLI rész -# ───────────────────────────────────────────────────────────────────────────── def _resolve(names, catalog): by = {a["name"].lower(): a for a in catalog} @@ -1425,9 +1602,6 @@ def cli_action(names, catalog, install: bool): print("Nincs végrehajtható lépés.") return 1 - # sudo -S jelszo nelkul a stdin pipe nyitva marad iras/EOF nelkul, - # es a folyamat orokre lefagy - a GUI-nak van jelszo dialogja, a - # CLI-nek eddig nem volt. password = "" if os.geteuid() != 0 and any( len(cmd) >= 2 and cmd[0] == "sudo" and cmd[1] == "-S" for _, cmd in steps @@ -1457,7 +1631,6 @@ def main(): cli_mode = args.list or args.installed or args.install or args.remove if not cli_mode: - # GUI-t user-ként indítsd (Wayland) - root GUI ne! if os.geteuid() == 0: print("Figyelem: a GUI-t NE rootként indítsd. " "Futtasd sima userként, a jogot pkexec kéri majd.") diff --git a/raveos-app-installer/raveos-secureboot-setup b/raveos-app-installer/raveos-secureboot-setup new file mode 100644 index 0000000..a02b046 --- /dev/null +++ b/raveos-app-installer/raveos-secureboot-setup @@ -0,0 +1,313 @@ +#!/bin/bash +set -u + +GLOBAL_GUID="8be4df61-93ca-11d2-aa0d-00e098032b8c" +DB_GUID="d719b2cb-3d3a-4596-a3bc-dad00e67656f" + +SB_DIR=/usr/share/raveos/secureboot +MS="$SB_DIR/ms" +MACHINE_DIR=/etc/raveos/secureboot +STATE=/var/lib/raveos-sb +RESUME_UNIT=raveos-sb-resume.service +WORK="" + +log() { echo "[raveos-sb] $*"; } + +cleanup() { [ -n "$WORK" ] && rm -rf "$WORK"; } +trap cleanup EXIT + +efi_var() { + od -An -t u1 /sys/firmware/efi/efivars/"$1"-* 2>/dev/null | awk '{print $5}' +} + +status_cmd() { + if [ ! -d /sys/firmware/efi/efivars ]; then + log "Nem UEFI rendszer - Secure Boot nem elerheto." + return 1 + fi + local sb sm keys tools signed + sb=$(efi_var SecureBoot) + sm=$(efi_var SetupMode) + keys=0 + [ -f "$MACHINE_DIR/machine.pem" ] && keys=1 + tools=0 + command -v sbsign >/dev/null 2>&1 && tools=1 + signed=0 + if [ "$keys" = "1" ] && command -v sbverify >/dev/null 2>&1; then + signed=1 + for f in /boot/EFI/systemd/systemd-bootx64.efi /boot/EFI/BOOT/BOOTX64.EFI /boot/vmlinuz-*; do + [ -f "$f" ] || continue + sbverify --cert "$MACHINE_DIR/machine.pem" "$f" >/dev/null 2>&1 || signed=0 + done + fi + echo "uefi=1" + echo "secureboot=${sb:-?}" + echo "setupmode=${sm:-?}" + echo "keys=$keys" + echo "tools=$tools" + echo "signed=$signed" + if [ -f "$STATE/pending" ]; then echo "pending=1"; else echo "pending=0"; fi + log "SecureBoot=${sb:-?} SetupMode=${sm:-?} gepkulcs=$keys alairasok=$signed" +} + +deps_cmd() { + local need=() + local p + for p in sbsigntools efitools openssl zstd; do + pacman -Qq "$p" >/dev/null 2>&1 || need+=("$p") + done + if [ "${#need[@]}" -gt 0 ]; then + log "Hianyzo eszkozok telepitese: ${need[*]}" + pacman -S --noconfirm "${need[@]}" || return 1 + fi +} + +keygen_cmd() { + if [ -f "$MACHINE_DIR/machine.key" ]; then + log "A gepkulcs mar letezik." + return 0 + fi + install -d -m 711 "$MACHINE_DIR" + openssl req -newkey rsa:2048 -nodes -keyout "$MACHINE_DIR/machine.key" -x509 -days 3650 \ + -out "$MACHINE_DIR/machine.pem" \ + -subj "/O=RaveOS/CN=RaveOS Machine Key" \ + -addext "basicConstraints=critical,CA:TRUE" \ + -addext "keyUsage=critical,digitalSignature,keyCertSign,cRLSign" \ + -addext "extendedKeyUsage=codeSigning" 2>/dev/null || { + log "HIBA: gepkulcs generalas sikertelen" + return 1 + } + chmod 600 "$MACHINE_DIR/machine.key" + chmod 644 "$MACHINE_DIR/machine.pem" + log "Gepkulcs generalva: CN=RaveOS Machine Key" +} + +signfile_path() { + local c + for c in /usr/lib/modules/*/build/scripts/sign-file /usr/src/linux/scripts/sign-file; do + [ -x "$c" ] && { echo "$c"; return 0; } + done + return 1 +} + +sign_one() { + local key="$1" cert="$2" f="$3" + sbverify --cert "$cert" "$f" >/dev/null 2>&1 && return 0 + if sbsign --key "$key" --cert "$cert" --output "$f.signed" "$f" 2>/dev/null; then + mv "$f.signed" "$f" + log "alairva: $f" + return 0 + fi + log "FIGYELEM: nem sikerult alairni: $f" + return 1 +} + +sign_cmd() { + command -v sbsign >/dev/null 2>&1 || { log "HIBA: sbsign nem elerheto"; return 1; } + local key="$MACHINE_DIR/machine.key" cert="$MACHINE_DIR/machine.pem" + local n=0 f signfile t + for f in /boot/EFI/systemd/systemd-bootx64.efi /boot/EFI/BOOT/BOOTX64.EFI /boot/vmlinuz-* /boot/memtest86+/memtest.efi; do + [ -f "$f" ] || continue + sign_one "$key" "$cert" "$f" && n=$((n + 1)) + done + signfile=$(signfile_path) || signfile="" + if [ -n "$signfile" ]; then + install -m 755 "$signfile" /usr/local/bin/raveos-sign-file + local d sub m + for d in /usr/lib/modules/*/; do + for sub in extramodules updates/dkms extras; do + [ -d "${d}${sub}" ] || continue + while IFS= read -r -d '' m; do + if modinfo -F signer "$m" 2>/dev/null | grep -q "RaveOS Machine Key"; then + continue + fi + case "$m" in + *.ko) + /usr/local/bin/raveos-sign-file sha512 "$key" "$cert" "$m" >/dev/null 2>&1 && n=$((n + 1)) + ;; + *.ko.zst) + t=$(mktemp -d) + if zstd -q -d -c "$m" > "$t/m.ko" 2>/dev/null && + /usr/local/bin/raveos-sign-file sha512 "$key" "$cert" "$t/m.ko" >/dev/null 2>&1 && + zstd -q -f -o "$m" "$t/m.ko" 2>/dev/null; then + n=$((n + 1)) + fi + rm -rf "$t" + ;; + esac + done < <(find "${d}${sub}" -type f \( -name '*.ko' -o -name '*.ko.zst' \) -print0 2>/dev/null) + done + done + else + log "FIGYELEM: sign-file nem talalhato (kernel-headers nelkul a modulok kimaradnak)" + fi + log "Alairt elemek: $n" +} + +hook_cmd() { + install -d -m 755 /usr/local/bin /etc/pacman.d/hooks + install -m 755 "$SB_DIR/installed/raveos-sb-sign-local.sh" /usr/local/bin/raveos-sb-sign-local.sh + install -m 644 "$SB_DIR/installed/zz-raveos-sb-sign.hook" /etc/pacman.d/hooks/zz-raveos-sb-sign.hook + log "Pacman hook + helyi alairo telepitve." +} + +verify_cmd() { + local cert="$MACHINE_DIR/machine.pem" bad=0 f + for f in /boot/EFI/systemd/systemd-bootx64.efi /boot/EFI/BOOT/BOOTX64.EFI /boot/vmlinuz-*; do + [ -f "$f" ] || continue + sbverify --cert "$cert" "$f" >/dev/null 2>&1 || { bad=1; log "NINCS alairva: $f"; } + done + [ "$bad" = "0" ] && log "Alairas-ellenorzes: rendben." + if command -v efi-readvar >/dev/null 2>&1; then + log "Firmware db tartalom:" + efi-readvar -v db 2>/dev/null | grep -E "CN *=|O *=" | head -14 + fi +} + +cert_to_esl() { + cert-to-efi-sig-list "$1" "$2" 2>/dev/null || return 1 + local sz + sz=$(stat -c %s "$2" 2>/dev/null || echo 0) + [ "$sz" -gt 100 ] +} + +build_db_esl() { + local out="$1" f + cert_to_esl "$SB_DIR/db.pem" "$WORK/raveos-db.esl" || return 1 + cert_to_esl "$MACHINE_DIR/machine.pem" "$WORK/machine.esl" || return 1 + cat "$WORK/raveos-db.esl" > "$out" + for f in "$MS/MicCorUEFCA2011_2011-06-27.pem" "$MS/MicWinProPCA2011_2011-10-19.pem" \ + "$MS/microsoft uefi ca 2023.pem" "$MS/windows uefi ca 2023.pem" \ + "$MS/microsoft option rom uefi ca 2023.pem"; do + [ -f "$f" ] || continue + cert_to_esl "$f" "$WORK/ms-extra.esl" && cat "$WORK/ms-extra.esl" >> "$out" + done + cat "$WORK/machine.esl" >> "$out" +} + +build_kek_esl() { + local out="$1" f + cert_to_esl "$SB_DIR/KEK.pem" "$WORK/raveos-kek.esl" || return 1 + cat "$WORK/raveos-kek.esl" > "$out" + for f in "$MS/MicCorKEKCA2011_2011-06-24.pem" "$MS/microsoft corporation kek 2k ca 2023.pem"; do + [ -f "$f" ] || continue + cert_to_esl "$f" "$WORK/ms-extra.esl" && cat "$WORK/ms-extra.esl" >> "$out" + done +} + +clear_var() { + local name="$1" guid="$2" f + f="/sys/firmware/efi/efivars/${name}-${guid}" + [ -e "$f" ] || return 0 + chattr -i "$f" 2>/dev/null || true + rm -f "$f" 2>/dev/null || log "FIGYELEM: ${name} regi valtozo torlese nem sikerult" +} + +enroll_cmd() { + local sm t + sm=$(efi_var SetupMode) + if [ "${sm:-0}" != "1" ]; then + log "A firmware nincs Setup Mode-ban." + return 10 + fi + for t in cert-to-efi-sig-list efi-updatevar; do + command -v "$t" >/dev/null 2>&1 || { log "HIBA: $t nem elerheto (efitools)"; return 1; } + done + [ -f "$SB_DIR/PK.auth" ] || { log "HIBA: hianyzik a PK.auth"; return 1; } + + WORK=$(mktemp -d) + build_db_esl "$WORK/db.esl" || { log "HIBA: db ESL epites"; return 1; } + build_kek_esl "$WORK/KEK.esl" || { log "HIBA: KEK ESL epites"; return 1; } + + log "Meglevo PK/KEK/db valtozok torlese..." + clear_var PK "$GLOBAL_GUID" + clear_var KEK "$GLOBAL_GUID" + clear_var db "$DB_GUID" + + log "db irasa (RaveOS + Microsoft + gepkulcs)..." + efi-updatevar -e -f "$WORK/db.esl" db || { log "HIBA: db iras"; return 1; } + + log "KEK irasa (RaveOS + Microsoft)..." + efi-updatevar -e -f "$WORK/KEK.esl" KEK || { log "HIBA: KEK iras"; return 1; } + + log "PK irasa (elore alairt PK.auth)..." + efi-updatevar -f "$SB_DIR/PK.auth" PK || { log "HIBA: PK iras"; return 1; } + + log "Kulcsok telepitve a firmware-be." +} + +setup_cmd() { + status_cmd || return 1 + log "FIGYELEM (BitLocker): ha a Windowson BitLocker van, elotte inditsd el a Windowst es futtasd:" + log " manage-bde -protectors -disable C: -rebootcount 2" + log " vagy legyen keznel a 48 jegyu helyreallitasi kulcs." + deps_cmd || return 1 + keygen_cmd || return 1 + sign_cmd || return 1 + hook_cmd || return 1 + install -d -m 755 "$STATE" + local rc + enroll_cmd + rc=$? + if [ "$rc" = "0" ]; then + verify_cmd + rm -f "$STATE/pending" + log "KESZ. A BIOS-ban allitsd: Secure Boot -> Enabled, majd ujrainditas." + return 0 + fi + if [ "$rc" = "10" ]; then + install -m 644 "$SB_DIR/installed/raveos-sb-resume.service" /etc/systemd/system/"$RESUME_UNIT" + systemctl daemon-reload + systemctl enable "$RESUME_UNIT" >/dev/null 2>&1 + touch "$STATE/pending" + log "A BIOS-ban: Secure Boot -> Key Management -> Clear Secure Boot keys (Setup Mode)," + log "ments, majd inditsd ujra a gepet. Boot utan a folyamat magatol befejezodik." + return 10 + fi + return "$rc" +} + +resume_cmd() { + [ -f "$STATE/pending" ] || exit 0 + if enroll_cmd; then + verify_cmd + rm -f "$STATE/pending" + date -Is > "$STATE/done" + systemctl disable "$RESUME_UNIT" >/dev/null 2>&1 + log "Secure Boot beallitas befejezve. A BIOS-ban: Secure Boot -> Enabled." + exit 0 + fi + exit 1 +} + +need_root() { + if [ "$(id -u)" != "0" ]; then + echo "[raveos-sb] Root jogosultsag szukseges." >&2 + exit 1 + fi +} + +case "${1:-}" in + --status) + status_cmd + ;; + --verify) + verify_cmd + ;; + --setup) + need_root + setup_cmd + ;; + --resume) + need_root + resume_cmd + ;; + --resign) + need_root + keygen_cmd && sign_cmd && verify_cmd + ;; + *) + echo "hasznalat: raveos-secureboot-setup --status|--setup|--resume|--resign|--verify" >&2 + exit 2 + ;; +esac diff --git a/raveos-app-installer/secureboot/KEK.pem b/raveos-app-installer/secureboot/KEK.pem new file mode 100644 index 0000000..5a49691 --- /dev/null +++ b/raveos-app-installer/secureboot/KEK.pem @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDVzCCAj+gAwIBAgIUcKsPl6DDusNNC3vQNBhvFjw+vIwwDQYJKoZIhvcNAQEL +BQAwMzEPMA0GA1UECgwGUmF2ZU9TMSAwHgYDVQQDDBdSYXZlT1MgS2V5IEV4Y2hh +bmdlIEtleTAeFw0yNjEwMDIyMTU5MTNaFw0zNjA5MjkyMTU5MTNaMDMxDzANBgNV +BAoMBlJhdmVPUzEgMB4GA1UEAwwXUmF2ZU9TIEtleSBFeGNoYW5nZSBLZXkwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrz7sOnYkci8zut/0BmGbdftPk +3cSBn3/rOaY4RMgQ8gsntAQRRnOp1NHsu87/9u0qk+n4qgqX/EZBRYZozfEI3Xu5 +4h0LbZwsOFItaellUEw+Jfviz1ZCGj6cPRqtS/rZNMd2/6qdFc+hnz4FjRHX6cYM +WWuYBhUgjSbGncsh0qWg0BLVzwniD9rO/NQ7nCP2ZNnkllG9HRffIFzJjmP1/DfN +jXorb4egi7EFPFFgddB4wM6DeXd8GhosJD1ilW2W2Ww8Xu/R9IXTSOefG3sZLZKf +jaj7kmYNmkRrr0aQ2pSwC4lDsba7Yob6zsuDMyPjbSiPqTzZ12RXV7UdKN47AgMB +AAGjYzBhMB0GA1UdDgQWBBTVBDvn/UGvO9uqzh6Yb7Lw59LvhzAfBgNVHSMEGDAW +gBTVBDvn/UGvO9uqzh6Yb7Lw59LvhzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB +/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEAFhnk0GsalDm66gp+yrWTiP/9vVny +RD3RdryYxTcpPAjRAmmAdgPGE6IxX5cfkgYw+OdvBmDJah4p9Z945NF3Emjm3xlY +2RmDI4IGeBTBKKt03cx69fdvUyuQAqx9mBoGywolUk3mWi8LK2YLU0NPuKCuduw1 +UFw5NEkwJg9Awo0YKTZHxMrHkftXY5CAUi6H0VeYJlpMiaRPInEYIYJuMVEWFaL4 +wsFC6pTHwYsMH9yrijzcMQ2PSZeZi8jGPCG4LifVzv/VwHxgwvK9Byy5yVvFvVCT +h2A0T27Qxf23Xbu/wh/rgaM/cSg8gsFidqyTEyeCEDYyxSIk1lzsuT+zrw== +-----END CERTIFICATE----- diff --git a/raveos-app-installer/secureboot/PK.auth b/raveos-app-installer/secureboot/PK.auth Binary files differnew file mode 100644 index 0000000..b546b2c --- /dev/null +++ b/raveos-app-installer/secureboot/PK.auth diff --git a/raveos-app-installer/secureboot/PK.pem b/raveos-app-installer/secureboot/PK.pem new file mode 100644 index 0000000..558c178 --- /dev/null +++ b/raveos-app-installer/secureboot/PK.pem @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDTzCCAjegAwIBAgIUTwsILq1KfHS0nLE9ylandBBWErcwDQYJKoZIhvcNAQEL +BQAwLzEPMA0GA1UECgwGUmF2ZU9TMRwwGgYDVQQDDBNSYXZlT1MgUGxhdGZvcm0g +S2V5MB4XDTI2MTAwMjIxNTkxM1oXDTM2MDkyOTIxNTkxM1owLzEPMA0GA1UECgwG +UmF2ZU9TMRwwGgYDVQQDDBNSYXZlT1MgUGxhdGZvcm0gS2V5MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0BfhuL/qkkT2w52O+lDV1UebAJvWT1six9MJ +pbxbO8NVhvQnwSK2mixYhvfOQVctW7ww7pN6eFk3e/j3IyWUHDhUZbwA4/4d6TpM +MJQoLkfNN/Xa5+eNKWGFaOQOQ+qDAPy9rNYvqHPCS8f9pEOsLFW7vhlTsmtr3qeX +E2rLXPVdQmLuzsKTvHbKWbI4ofxqBU44TAU0FVXAaC5OWDSwYuRwr0WZgFXxnn2e +G4qA7/Uix8esq6eLR+mYDK63w2iMnraHmXiCcK5W+2jDflkns87EeKRJpWAqleUI +L3LDotB/TzjM59Nx5QFAGho42qMS46ea8oluAXZTs+lWSFdd3wIDAQABo2MwYTAd +BgNVHQ4EFgQUtFZf8lEVkLs+PQe3U3LFwExzuTkwHwYDVR0jBBgwFoAUtFZf8lEV +kLs+PQe3U3LFwExzuTkwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw +DQYJKoZIhvcNAQELBQADggEBAA6zG2QTdZUsgKrhLMabO5exce7yGuhsFB0uRe2F +ooa6RfswSRe4QNUdnAcLNsqSNMRAJ4Pboz7bi2zp4QPkZh92EADG/UWUXQJEzl25 +s8QsIJAr88Qf1fXG07kz0JBBh1A7MzoSaNZ4JLdoovAFkZuG7pHIT4VxnqpzYS2c +0w2EqPtqubTzPqt6wZ191QtPp1Jif6WL95VapGVpqGzQKo6msirdNcGrIX0JR7Lm +CrmIkh5HogWYzY3YYmEbjbM5uK0019NZg5vAmLCy6P6SHq5+feUd1ae02EfW0FTa +udszl9fXtWlmoioffvRvpZ7VBXXPnXv7Ca6nDxgEVAjNYgg= +-----END CERTIFICATE----- diff --git a/raveos-app-installer/secureboot/db.pem b/raveos-app-installer/secureboot/db.pem new file mode 100644 index 0000000..c9ed693 --- /dev/null +++ b/raveos-app-installer/secureboot/db.pem @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDYjCCAkqgAwIBAgIUapoezG6LBdbRhKoNniRol3q6Ui4wDQYJKoZIhvcNAQEL +BQAwLjEPMA0GA1UECgwGUmF2ZU9TMRswGQYDVQQDDBJSYXZlT1MgU2VjdXJlIEJv +b3QwHhcNMjYxMDAyMjE1OTEzWhcNMzYwOTI5MjE1OTEzWjAuMQ8wDQYDVQQKDAZS +YXZlT1MxGzAZBgNVBAMMElJhdmVPUyBTZWN1cmUgQm9vdDCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAJjE+etmu0Ev7chkgiih4D2AZ02+W9xzp+t8dEBC +P1Sw4xXXG56jBvPzDC48F4u4GZLu/DSDMfpXqg6AvVVaXRXE48E2hIRMCshoLjId +xkl+cGFQ2KvGo+hFItftq8IV1hU0zqtKfxa+eygklim1bjhB6jBsm9bjstbQ/fl3 +j2vPw1yTmpwgx6NgfFLtrXeZ1KGKIAo/kImiqStPyh5cWH72CSG6ppYYiaW5sx+j +f0IqHsyllX/Hoii4NXjAmmTeRXk0c8Mj8B8RZBAx9V3m144j5+z2jRbvYElWxmwU +k1m6VA9x3UZXZxiJ9BwwaL+8TK9UNS8QhOZ+BF5rQjbaeScCAwEAAaN4MHYwHQYD +VR0OBBYEFI/b7ftnyYNFrGMT/WFuwopejtdYMB8GA1UdIwQYMBaAFI/b7ftnyYNF +rGMT/WFuwopejtdYMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMBMG +A1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBCwUAA4IBAQATWkIFkjetX/eQ +Mas/kADYYOeOcTZ/N4ha56aDYicEs2g+jUGSzUBvELhBLLM0TVIn/Qrej175sBox +icwtQJuIUJdZauF8tf217JT+NFRjwAaW7DGdQpeMTLSP5ijhD1XoX8Yp0/00bJiK +/ZjP1CWCgYlJYJyKmU8a0cPPvTWMaL8e8mT/yHvzVrBfUyJrZh9wWJmnym43Rt8X +IuMkuORXy32873J3KOYhVZLZ+o//LDfpAzohDagZaFM5oiXKG24P/mbSAN6HQuki +Q5qh4lr5P4afJPdjiA41sT8Tz/xhRlAGF06KfUXcWKX5qA8+HSb5lo0EapEWEQWC +KPLgKAk1 +-----END CERTIFICATE----- diff --git a/raveos-app-installer/secureboot/installed/raveos-sb-resume.service b/raveos-app-installer/secureboot/installed/raveos-sb-resume.service new file mode 100644 index 0000000..d6005b6 --- /dev/null +++ b/raveos-app-installer/secureboot/installed/raveos-sb-resume.service @@ -0,0 +1,7 @@ +[Unit] +Description=RaveOS Secure Boot beallitas befejezese +[Service] +Type=oneshot +ExecStart=/usr/bin/raveos-secureboot-setup --resume +[Install] +WantedBy=multi-user.target diff --git a/raveos-app-installer/secureboot/installed/raveos-sb-sign-local.sh b/raveos-app-installer/secureboot/installed/raveos-sb-sign-local.sh new file mode 100755 index 0000000..af20118 --- /dev/null +++ b/raveos-app-installer/secureboot/installed/raveos-sb-sign-local.sh @@ -0,0 +1,50 @@ +#!/bin/bash +set -u + +KEY=/etc/raveos/secureboot/machine.key +CERT=/etc/raveos/secureboot/machine.pem +SIGNFILE=/usr/local/bin/raveos-sign-file +[[ -f "$KEY" && -f "$CERT" ]] || exit 0 +command -v sbsign >/dev/null 2>&1 || exit 0 + +signed=0 + +for f in /boot/vmlinuz-* /boot/memtest86+/memtest.efi /boot/EFI/systemd/systemd-bootx64.efi /boot/EFI/BOOT/BOOTX64.EFI; do + [[ -f "$f" ]] || continue + case "$f" in *.signed) continue ;; esac + if sbverify --cert "$CERT" "$f" >/dev/null 2>&1; then + continue + fi + if sbsign --key "$KEY" --cert "$CERT" --output "${f}.signed" "$f" 2>/dev/null; then + mv "${f}.signed" "$f" + signed=$((signed + 1)) + fi +done + +if [[ -x "$SIGNFILE" ]]; then + for d in /usr/lib/modules/*/; do + for sub in extramodules updates/dkms extras; do + [[ -d "${d}${sub}" ]] || continue + while IFS= read -r -d '' f; do + modinfo -F signer "$f" 2>/dev/null | grep -q "RaveOS Machine Key" && continue + case "$f" in + *.ko) + "$SIGNFILE" sha512 "$KEY" "$CERT" "$f" >/dev/null 2>&1 && signed=$((signed + 1)) + ;; + *.ko.zst) + tmp="$(mktemp -d)" + if zstd -q -d -c "$f" > "$tmp/m.ko" 2>/dev/null && + "$SIGNFILE" sha512 "$KEY" "$CERT" "$tmp/m.ko" >/dev/null 2>&1 && + zstd -q -f -o "$f" "$tmp/m.ko" 2>/dev/null; then + signed=$((signed + 1)) + fi + rm -rf "$tmp" + ;; + esac + done < <(find "${d}${sub}" -type f \( -name '*.ko' -o -name '*.ko.zst' \) -print0 2>/dev/null) + done + done +fi + +[ "$signed" -gt 0 ] && echo "[raveos-sb] $signed fajl ujraalairva" +exit 0 diff --git a/raveos-app-installer/secureboot/installed/zz-raveos-sb-sign.hook b/raveos-app-installer/secureboot/installed/zz-raveos-sb-sign.hook new file mode 100644 index 0000000..cf64ee2 --- /dev/null +++ b/raveos-app-installer/secureboot/installed/zz-raveos-sb-sign.hook @@ -0,0 +1,17 @@ +[Trigger] +Operation = Install +Operation = Upgrade +Type = Package +Target = linux-cachyos +Target = linux +Target = nvidia +Target = nvidia-dkms +Target = nvidia-open +Target = nvidia-open-dkms +Target = systemd +Target = dkms + +[Action] +Description = RaveOS Secure Boot: bootlanc + out-of-tree modulok ujraalairasa... +When = PostTransaction +Exec = /usr/local/bin/raveos-sb-sign-local.sh diff --git a/raveos-app-installer/secureboot/ms/MicCorKEKCA2011_2011-06-24.pem b/raveos-app-installer/secureboot/ms/MicCorKEKCA2011_2011-06-24.pem new file mode 100644 index 0000000..37c814a --- /dev/null +++ b/raveos-app-installer/secureboot/ms/MicCorKEKCA2011_2011-06-24.pem @@ -0,0 +1,34 @@ +-----BEGIN CERTIFICATE----- +MIIF6DCCA9CgAwIBAgIKYQrRiAAAAAAAAzANBgkqhkiG9w0BAQsFADCBkTELMAkG +A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx +HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE7MDkGA1UEAxMyTWljcm9z +b2Z0IENvcnBvcmF0aW9uIFRoaXJkIFBhcnR5IE1hcmtldHBsYWNlIFJvb3QwHhcN +MTEwNjI0MjA0MTI5WhcNMjYwNjI0MjA1MTI5WjCBgDELMAkGA1UEBhMCVVMxEzAR +BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p +Y3Jvc29mdCBDb3Jwb3JhdGlvbjEqMCgGA1UEAxMhTWljcm9zb2Z0IENvcnBvcmF0 +aW9uIEtFSyBDQSAyMDExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA +xOi1ir+tVyawJsPq5/tXekQCXQcN2krldCrmsA/sbevsf7njWmMyfBEXTw7jC6c4 +FZOOxvXghLGamyzn9beR1gnh4sAEqKwwHN9I8wZQmmSnUX/IhU+PIIbO/i/hn/+C +wO3pzc70U2piOgtDueIl/f4F+dTEFKsR4iOJjXC3pB1N7K7lnPoWwtfBy9ToxC/l +me4kiwPsjfKL6sNK+0MREgt+tUeSbNzmBInr9TME6xABKnHl+YMTPP8lCS9odkb/ +uk++3K1xKliq+w7SeT3km2U7zCkqn/xyWaLrrpLv9jUTgMYC7ORfzJ12ze9jksGv +eUCEeYd/41Ko6J17B2mPFQIDAQABo4IBTzCCAUswEAYJKwYBBAGCNxUBBAMCAQAw +HQYDVR0OBBYEFGL8Q82gPqTLZxLSW9lVrHvMtopfMBkGCSsGAQQBgjcUAgQMHgoA +UwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQY +MBaAFEVmUkPhflgRv9ZOniNVCDs6ImqoMFwGA1UdHwRVMFMwUaBPoE2GS2h0dHA6 +Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvclRoaVBh +ck1hclJvb18yMDEwLTEwLTA1LmNybDBgBggrBgEFBQcBAQRUMFIwUAYIKwYBBQUH +MAKGRGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29yVGhp +UGFyTWFyUm9vXzIwMTAtMTAtMDUuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQDUhIj1 +FJQYAsoqPPsqkhwM16DR8ehSZqjuorV1epAAqi2kdlrqebe5N2pRexBk9uFk8gJn +vveoG3i9us6IWGQM1lfIGaNfBdbbxtBpzkhLMrfrXdIw9cD1uLp4B6Mr/pvbNFaE +7ILKrkElcJxr6f6QD9eWH+XnlB+yKgyNS/8oKRB799d8pdF2uQXIee0PkJKcwv7f +b35sD3vUwUXdNFGWOQ/lXlbYGAWW9AemQrOgd/0IGfJxVsyfhiOkh8um/Vh+1Gln +FZF+gfJ/E+UNi4o8h4Tr4869Q+WtLYSTjmorWnxE+lKqgcgtHLvgUt8AEfiaPcFg +sOEztaOI0WUZChrnrHykwYKHTjixLw3FFIdv/Y0uvDm25+bD4OTNJ4TvlELvKYuQ +RkE7gRtn2PlDWWXLDbz9AJJP9HU7p6kk/FBBQHngLU8Kaid2blLtlml7rw/3hwXQ +RcKtUxSBH/swBKo3NmHaSmkbNNho7dYCz2yUDNPPbCJ5rbHwvAOiRmCpxAfCIYLx +/fLoeTJgv9ispSIUS8rB2EvrfT9XNbLmT3W0sGADIlOukXkd1ptBHxWGVHCy3g01 +D3ywNHK6l2A78HnrorIcXaIWuIfF6Rv2tZclbzif45H6inmYw2kOt6McIAWX+MoU +rgDXxPPAFBB1azSgG7WZYPNcsMVXTjbSMoS/ng== +-----END CERTIFICATE----- diff --git a/raveos-app-installer/secureboot/ms/MicCorUEFCA2011_2011-06-27.pem b/raveos-app-installer/secureboot/ms/MicCorUEFCA2011_2011-06-27.pem new file mode 100644 index 0000000..d7c29ef --- /dev/null +++ b/raveos-app-installer/secureboot/ms/MicCorUEFCA2011_2011-06-27.pem @@ -0,0 +1,35 @@ +-----BEGIN CERTIFICATE----- +MIIGEDCCA/igAwIBAgIKYQjTxAAAAAAABDANBgkqhkiG9w0BAQsFADCBkTELMAkG +A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx +HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE7MDkGA1UEAxMyTWljcm9z +b2Z0IENvcnBvcmF0aW9uIFRoaXJkIFBhcnR5IE1hcmtldHBsYWNlIFJvb3QwHhcN +MTEwNjI3MjEyMjQ1WhcNMjYwNjI3MjEzMjQ1WjCBgTELMAkGA1UEBhMCVVMxEzAR +BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p +Y3Jvc29mdCBDb3Jwb3JhdGlvbjErMCkGA1UEAxMiTWljcm9zb2Z0IENvcnBvcmF0 +aW9uIFVFRkkgQ0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AKUIbEzHRQlqSwykwId/BnUMQwFUZOAWfwftkn0LsnO/DArGSkVhoMUWLZbT9Sug ++01Jm0GAkDy5VP3mvNGdxKQYin9BilxZg2gyu4xHye5xvCFPmop8/0Q/jY8ysiZI +rnW17slMHkoZfuSCmh14d00MsL32D9MW07z6K6VROF31+7rbeALb/+wKG5bVg7gZ +E+m2wHtAe+EfKCfJ+u9WXhzmfpR+wPBEsnk55dqyYotNvzhw4mgkFMkzpAg31Vhp +XtN87cEEUwjnTrAqh2MIYW9jFVnqsit51wxhZ4pb/V6th3+6hmdPcVgSIgQiIs6L +71RxAM5QNVh2lQjuarGiAdUCAwEAAaOCAXYwggFyMBIGCSsGAQQBgjcVAQQFAgMB +AAEwIwYJKwYBBAGCNxUCBBYEFPjBa7d/d1NK8yU3HU6hJnsPIHCAMB0GA1UdDgQW +BBQTrb9DCb2CcJyM1U8xbtUimIob1DAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMA +QTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRFZlJD +4X5YEb/WTp4jVQg7OiJqqDBcBgNVHR8EVTBTMFGgT6BNhktodHRwOi8vY3JsLm1p +Y3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNDb3JUaGlQYXJNYXJSb29f +MjAxMC0xMC0wNS5jcmwwYAYIKwYBBQUHAQEEVDBSMFAGCCsGAQUFBzAChkRodHRw +Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY0NvclRoaVBhck1hclJv +b18yMDEwLTEwLTA1LmNydDANBgkqhkiG9w0BAQsFAAOCAgEANQhC/zDMzvd2DK0Q +aFg1KUYydid87xJBJ0IbSqptgThIWRNV8+lYNKYWC4KqXa2C2oCDQQaPtB3yA7nz +Gl0b8VCQ+bNVhEIoHCC9sq5RFMXArJeVIRyQ2w/8d56Vc5GIyr29UrkFUA3fV56g +Ye0N5W0l2UAPF0DIzqNKwk2vmhIdCFSPvce8uSs9SSsfMvxqIWlPm8h+QjT8NgYX +i48gQMCzmiV1J83JA6P2XdHnNlR6uVC10xLRB7+7dN/cHo+A1e0Y9C8UFmsv3maM +sCPlx4TY7erBM4KtVksYLfFolQfNz/By8K673YaFmCwhTDMr8A9K8GiHtZJVMnWh +aoJqPKMlEaTtrdcErsvYQFmghNGVTGKRIhp0HYw9Rw5EpuSwmzQ1sfq2U6gsgeyk +BXHInbi66BtEZuRHVA6OVn+znxaYsobQaD6QI7UvXo9QhY3GjYJfQaH0Lg3gmdJs +deS2abUhhvoH0fbiTdHarSx3Ux4lMjfHbFJylYaw8TVhahn1sjuBUFamMi3+oon5 +QoYnGFWhgspam/gwmFQUpkeWJS/IJuRBlBpcAj/lluOFWzw+P7tHFnJV4iUisdl7 +5wMGKqP3HpBGwwAN1hmJ4w41J2IDcRWm79AnoKBZN2D4OJS44Hhw+LpMhoeU9uCu +AkXuZcK2o35pFnUHkpv1prxZg1g= +-----END CERTIFICATE----- diff --git a/raveos-app-installer/secureboot/ms/MicWinProPCA2011_2011-10-19.pem b/raveos-app-installer/secureboot/ms/MicWinProPCA2011_2011-10-19.pem new file mode 100644 index 0000000..0390d2a --- /dev/null +++ b/raveos-app-installer/secureboot/ms/MicWinProPCA2011_2011-10-19.pem @@ -0,0 +1,34 @@ +-----BEGIN CERTIFICATE----- +MIIF1zCCA7+gAwIBAgIKYQd2VgAAAAAACDANBgkqhkiG9w0BAQsFADCBiDELMAkG +A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx +HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9z +b2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMTExMDE5MTg0 +MTQyWhcNMjYxMDE5MTg1MTQyWjCBhDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh +c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD +b3Jwb3JhdGlvbjEuMCwGA1UEAxMlTWljcm9zb2Z0IFdpbmRvd3MgUHJvZHVjdGlv +biBQQ0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN0Mu6Lk +Lgnj58X3lmm8ACG9aTMz760Ey1SA7gaDu8UghNn30ovzOLCrpK0tfGJ5Bf/jSj8E +NSBw48Tna+CcwDZ16Yox3Y1w5dw3tXRGlihbh2AjLL/cR6Vn91EnnnLrB6bJuR47 +UzV85dPsJ7mHHP65ySMJb6hGkcFuljxB08ujP10Cak3saR8lKFw2//1DFQqU4Bm0 +z9/CEuLCWyfuJ3gwi1sqCWsiiVNgFizAaB1TuuxJ851hjIVoCXNEXX2iVCvdefcV +zzVdbBwrXM68nCOLb261Jtk2E8NP1ieuuTI7QZIs4cfNd+iqVE73XAsEh2W0Qxio +suBtGXfsWiT6SAMCAwEAAaOCAUMwggE/MBAGCSsGAQQBgjcVAQQDAgEAMB0GA1Ud +DgQWBBSpKQI5jhbEl3jNkPmeT5rhfFWvUzAZBgkrBgEEAYI3FAIEDB4KAFMAdQBi +AEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV +9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3Js +Lm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRfMjAx +MC0wNi0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8v +d3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2 +LTIzLmNydDANBgkqhkiG9w0BAQsFAAOCAgEAFPx8cVGlecJusu85Prw8Ug9uKz8Q +E3P+qGjQSKY0TYqWBSbuMUaQYXnW/zguRWv0wOUouNodj4rbCdcax0wKNmZqjOwb +1wSQqBgXpJu54kAyNnbEwVrGv+QEwOoW06zDaO9irN1UbFAwWKbrfP6Up06O9Ox8 +hnNXwlIhczRa86OKVsgE2gcJ7fiL4870fo6u8PYLigj7P8kdcn9TuOu+Y+DjPTFl +sIHl8qzNFqSfPaixm8JC0JCEX1Qd/4nquh1HkG+wc05Bn0CfX+WhKrIRkXOKISjw +zt5zOV8+q1xg7N8DEKjTCen09paFtn9RiGZHGY2isBI9gSpoBXe7kUxie7bBB8e6 +eoc0Aw5LYnqZ6cr8zko3yS2kV3wc/j3cuA9a+tbEswKFAjrqs9lu5GkhN96B0fZ1 +GQVn05NXXikbOcjuLeHN5EVzW9DSznqrFhmCRljQXp2Bs2evbDXyvOU/JOI1ogp1 +BvYYVpnUeCzRBRvr0IgBnaoQ8QXfun4sY7cGmyMhxPl4bOJYFwY2K5ESA8yk2fIt +uvmUnUDtGEXxzopcaz6rA9NwGCoKauBfR9HVYwoy8q/XNh8qcFrlQlkIcUtXun6D +gfAhPPQcwcW5kJMOiEWThumxIJm+mMvFlaRdYtagYwggvXUQd30980W5n5efy1eA +bzOpBM93pGIcWX4= +-----END CERTIFICATE----- diff --git a/raveos-app-installer/secureboot/ms/microsoft corporation kek 2k ca 2023.pem b/raveos-app-installer/secureboot/ms/microsoft corporation kek 2k ca 2023.pem new file mode 100644 index 0000000..771d8ad --- /dev/null +++ b/raveos-app-installer/secureboot/ms/microsoft corporation kek 2k ca 2023.pem @@ -0,0 +1,33 @@ +-----BEGIN CERTIFICATE----- +MIIFsjCCA5qgAwIBAgITMwAAABMUFrhhbYKCSwAAAAAAEzANBgkqhkiG9w0BAQsF +ADBaMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u +MSswKQYDVQQDEyJNaWNyb3NvZnQgUlNBIERldmljZXMgUm9vdCBDQSAyMDIxMB4X +DTIzMDMwMjIwMjEzNVoXDTM4MDMwMjIwMzEzNVowXDELMAkGA1UEBhMCVVMxHjAc +BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEtMCsGA1UEAxMkTWljcm9zb2Z0 +IENvcnBvcmF0aW9uIEtFSyAySyBDQSAyMDIzMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA416Ii3MswwrE6fXOgS3xD/EmNTfRSVNxsVuTUq/hFd/eizm9 +r0xldVPl2goymC8zJrYrvpSZn+zawo4FNJITD2O/dKJyqCl+nzIhKQhZxHfEKpJM +h7YDN+ua4sPJtEghw2GU6hdRsecU4iRjLtXyxqXyol4facZRDacp+1IKm+OI6Gj/ +u/qSaa/EFv9d5V/g3+xmVQthwqw7IG7ftA3rK8jQwjROgpY57vExhQQ979Z2+8PK +wdWMLwsQKJtImrAQFKTZlOVoW81u53rsvKBJuKlT2E0vsnvI2ryy5/yrcBB3lUVJ +/a3SPxfLZpryfTbdCiziwIchLZPbCJbS6FxU4QIDAQABo4IBbTCCAWkwDgYDVR0P +AQH/BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBTgq3K8lj7/uGab +fRBaQz5cQlSHXzAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAPBgNVHRMBAf8E +BTADAQH/MB8GA1UdIwQYMBaAFIREhgYAmD8sqrPFifOsLsnmnQkDMGUGA1UdHwRe +MFwwWqBYoFaGVGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01p +Y3Jvc29mdCUyMFJTQSUyMERldmljZXMlMjBSb290JTIwQ0ElMjAyMDIxLmNybDBy +BggrBgEFBQcBAQRmMGQwYgYIKwYBBQUHMAKGVmh0dHA6Ly93d3cubWljcm9zb2Z0 +LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwUlNBJTIwRGV2aWNlcyUyMFJv +b3QlMjBDQSUyMDIwMjEuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCFAgYS+meuTzmp +uDTcXSp4GXs47pyCjxviPD0yCl6/WAbnb/iNGKgbhPWbyq2LCEQOJo0s2F9uIyUH ++ltMJi52MUMubujIMcFK0vICt6bxdeSW7QbiypV4RKgzdtQrTde83Ic7q00prZaJ +t9XCj6tGw12z/e2lnvV2tyuF/5ihn2scmz737g4Xo/02L+HNKJgcQJkmygONpjXq +0gqnixauIQEAHicPtw6yQjFWLub4juoMNPBO33AwaQTRz9OcZEZvzCHNy+8FMrsI +ptifRThdTtKckonpc+R6CDUeT6bCums+tx9UNEn6tHrL2qAfWYErKvaIJrD6bPLr +wdiuQeFv/L8T6G4U5+fHA4tAmRA4Bm1wvQHI3o1WHTgPTyOoJUDeuygtQ6+kvCCD +tQb5BSGfO7l5DXBrU8B1whsQE7Pkbwmoz9G3DnFct8mP5RzwE1XZk7muXT/KC7BZ +akVKw+HjJ3gNFoH8WC2xQboYDc/w76sIHk/4/Mb9S90d7zAlUDmj3/4/ufrrlpfQ +zfkEJvsNSBkI2OGTwVDHbm3Y0GuOlXJkUMntVYluwUuiBtQytaltZQF68VJXGAUw +XLgoZhG3evBxToZhYHptVsdbCT6i79QOnpLTH5n2nbEdeHhr/+gqBK94Zz7wKgun +4F0B6YeZNTCQ7ddFa5zM5qLk5hen3Q== +-----END CERTIFICATE----- diff --git a/raveos-app-installer/secureboot/ms/microsoft option rom uefi ca 2023.pem b/raveos-app-installer/secureboot/ms/microsoft option rom uefi ca 2023.pem new file mode 100644 index 0000000..139ca44 --- /dev/null +++ b/raveos-app-installer/secureboot/ms/microsoft option rom uefi ca 2023.pem @@ -0,0 +1,33 @@ +-----BEGIN CERTIFICATE----- +MIIFrzCCA5egAwIBAgITMwAAABez7E2PAeJwBQAAAAAAFzANBgkqhkiG9w0BAQsF +ADBaMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u +MSswKQYDVQQDEyJNaWNyb3NvZnQgUlNBIERldmljZXMgUm9vdCBDQSAyMDIxMB4X +DTIzMTAyNjE5MDIyMFoXDTM4MTAyNjE5MTIyMFowWTELMAkGA1UEBhMCVVMxHjAc +BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEqMCgGA1UEAxMhTWljcm9zb2Z0 +IE9wdGlvbiBST00gVUVGSSBDQSAyMDIzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEA0wv+ic3Ntu7c5RqN3MohGg8iLwu1MoQ1wL5vcJNVtEfMSQPC/s+6 +MmVktzW9BDtEZC+g8t3hXbrnvTmavctL4YOqG+hvTkyRUkOlxFBVaPXarEiinOw1 +pwRWaBnisWLUkvSFPzShFWeHIW4fydg1Mrg9y1jKKUNUSn6LVXsjejq2nUMHBGua +a/TwIP/6pt+inknoVcV1iESspEE6A3y76ZPkbPHteSbHizL3WUklMQBnGAxn+0DF +XXY9CYfCLYxfK1oeAQ8zr2UIkE/8ZFuco1zWUxtRAZ+Yz8RTxbHfs2hvRUvIRYXI +Hbie0XdxoNWid4fsZy65hwZG3UFDQGpfLwIDAQABo4IBbTCCAWkwDgYDVR0PAQH/ +BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRRT7+Tf6RvtXvwevi+ +2Es7hksXETAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAPBgNVHRMBAf8EBTAD +AQH/MB8GA1UdIwQYMBaAFIREhgYAmD8sqrPFifOsLsnmnQkDMGUGA1UdHwReMFww +WqBYoFaGVGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jv +c29mdCUyMFJTQSUyMERldmljZXMlMjBSb290JTIwQ0ElMjAyMDIxLmNybDByBggr +BgEFBQcBAQRmMGQwYgYIKwYBBQUHMAKGVmh0dHA6Ly93d3cubWljcm9zb2Z0LmNv +bS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwUlNBJTIwRGV2aWNlcyUyMFJvb3Ql +MjBDQSUyMDIwMjEuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBKS4D8cbGH3QaLJBDR +dvgQ5GU0obuBCH1w1BUk+ZA7SG9uTiP+hVPsopkfieQ0vtCYr/H4LfNH0bUyZJ7e +csAXfoEgesFfkfVOOqZ7adnQ1vD6gGPFwERn04snYcHl3FGZbiPJKRj+Nb1FIawP ++WDiD9FfcA+SK1hOz6xkLwlz7VAIyOGFc0AsMam0tiNLwBk7/RX408t0VM3au30E +hZ9wFXX5t/RhS/7kn0UO9YLpxfN4u6pq4fe7hZIrr0u1J06aySlvDsjSZGObXRQG +zHh/5BLdluOcBELsF/qSIafe9WmPILJk8z8Vo1GvJ2+3YlevdBfsq7HuqFDvr4OC +q2EEeT9JjEBWwDyv+ypaGR6q5i5nJCGsM/DXSosKJDAQplI+Hcj8kZyHG/qG4Z5r +5QlhdaijOV/in2wOhSHmvXal6kWDaB4vNr/gaIpCzh+4jeFg5pOK7rpKrbNJTO6j +A8mnooZxnIEBZ2kP3oBV1sDecoXARmDwzmAqiAiNnDDrqYtA82ElCeHhgjIEpSn4 +WewmtsjXI/AL02xjatov0tOlJZqaXqX9AqXsopCBaD49RY58BbIu6pkBRf0JMJQm +10os/n2CRDNDVctaQ9KSkv5OR8ZJPzUbIZxq2oL8ZDf7J+r0MN9l7ND8UAE4auzc +Ufb17psmzO5t/i9WDjroOCKOqg== +-----END CERTIFICATE----- diff --git a/raveos-app-installer/secureboot/ms/microsoft uefi ca 2023.pem b/raveos-app-installer/secureboot/ms/microsoft uefi ca 2023.pem new file mode 100644 index 0000000..5c7ad84 --- /dev/null +++ b/raveos-app-installer/secureboot/ms/microsoft uefi ca 2023.pem @@ -0,0 +1,33 @@ +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgITMwAAABY2vzaJnxV1zAAAAAAAFjANBgkqhkiG9w0BAQsF +ADBaMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u +MSswKQYDVQQDEyJNaWNyb3NvZnQgUlNBIERldmljZXMgUm9vdCBDQSAyMDIxMB4X +DTIzMDYxMzE5MjE0N1oXDTM4MDYxMzE5MzE0N1owTjELMAkGA1UEBhMCVVMxHjAc +BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEfMB0GA1UEAxMWTWljcm9zb2Z0 +IFVFRkkgQ0EgMjAyMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL0i +Kq7vGjGFE3hRp5v9/HjRY7gam2P1EgbbS0E1am+r9WoEzJfPu9QICRphOg3ms6BG +/wmt3oAk3BKA8l/ZFu3iQp3NL01hAmGKHEsdGGI5hpdxrT5/XXETS+kqAMG+1bcA +n15lsiwa/3Tt6oPSOYkzNXN9oKL6QORmUFiq/IfoXCCDNOyr4gvFXz7/SCsRkSbv +GG5XxZ8Yc5nv4Wp0K7svf1COHdo9drYE5cwuEMeDG4Oj5KUTE3FuM3ijqDzsSCZe +x8ZeDYeaqsxVNIGtnZD15pZjpugHIBfIkx7SrqTcrn1Zv4heYgyuW/IpQFYdJkDe +haatVtHPVUd2X5w52wMCAwEAAaOCAW0wggFpMA4GA1UdDwEB/wQEAwIBhjAQBgkr +BgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQUgaprMkTJNbzg1mKK85gnQh4ySX0wGQYJ +KwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME +GDAWgBSERIYGAJg/LKqzxYnzrC7J5p0JAzBlBgNVHR8EXjBcMFqgWKBWhlRodHRw +Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBSU0El +MjBEZXZpY2VzJTIwUm9vdCUyMENBJTIwMjAyMS5jcmwwcgYIKwYBBQUHAQEEZjBk +MGIGCCsGAQUFBzAChlZodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Nl +cnRzL01pY3Jvc29mdCUyMFJTQSUyMERldmljZXMlMjBSb290JTIwQ0ElMjAyMDIx +LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAB2ATKlOHEg8a81oUlRfl2NeVVJuLDt2R +pe3HXUdQk0W3lYhfFxlBY3a1grCoxZ2ZFTaJSb4Swmb7gwywgc7lpKvCoJrr9Qc8 +/iH4mtwZIQyeJCzRXKIWCkvr7EicsVt02wFkwuOAaqsazXcbajmat7pwRP9nlMWB +BvDLgQSTJyGZvYeIFJwicQ4LL1y+uJBUfMAevCubo1YXS5fn438TNPqwNGub9rIt +99h72CDTXKeVTE8q+eceaK/8bI/Ihj2fyNHvTRrI0fb9LXzj6EHB6ifB+44lhlqJ +phC+zuOPpXvEGqDodZD9IbDBo8UWI148zi/+jJi/CFz2ucWyPLbMyOx/0nd0y+3z +lsmLjRwqiQ+jj73OKoVGmiOij0LAmdbqhR9hGb4WNbd1oJWAZQaH1As1yMSqDs6i +CmNgyksrXCcEgq8+WIN6WthnPxBT9QwW9yZLioC5xR+g3tjTYUQURaf1q5qIF/23 +lFQCi+S3U6E+jZ5QgqgA4HiUG76zxDAfsg7b8EaQweZX/nzBcLIcS2TZEAMbNPtm +z4JunkCoETfyZYshCa88k2I987yD3T9VkBXSMa8R5/jKoILhuc+zV5PHVTesf0G/ +H5Y88yaU+djSVSSKirZB8OAWwCOSjHEKTGoNGVX3OpySIZah1fgKjJ2/yevKiEL8 +S7Tv/ycwIWE= +-----END CERTIFICATE----- diff --git a/raveos-app-installer/secureboot/ms/windows uefi ca 2023.pem b/raveos-app-installer/secureboot/ms/windows uefi ca 2023.pem new file mode 100644 index 0000000..9ba1c75 --- /dev/null +++ b/raveos-app-installer/secureboot/ms/windows uefi ca 2023.pem @@ -0,0 +1,33 @@ +-----BEGIN CERTIFICATE----- +MIIFqjCCA5KgAwIBAgITMwAAABqIi5gAViKEwQAAAAAAGjANBgkqhkiG9w0BAQsF +ADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT +B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UE +AxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcN +MjMwNjEzMTg1ODI5WhcNMzUwNjEzMTkwODI5WjBMMQswCQYDVQQGEwJVUzEeMBwG +A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR0wGwYDVQQDExRXaW5kb3dzIFVF +RkkgQ0EgMjAyMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALyyNdFU +ebSPzIEqbrMS1pOXMHw4XL95khkKDy0K/r/gqNgyP9Krb2+BwU0XaUXPhYAno3yz +Mcylp035Q9BaL9cYG9JYlgU5o5W3vN15waDPj+JTHismYqgcrjYeT6HfuRO6DCW7 +JGVnAaodQRC3NsFrLrVsENNOltCfKqHx7aEVC4KVxf9jihO1kjQeMV5hEa5dzPEQ +5kx5yXKyNIqCVi2rD3zAT5OOWXVBhqwJEAnyUWVQtfUhsyY5jarEkbPcrGQjBs01 +Xw1CSZxPDc6Ag4JZ/t9LROFAyD1jts+0Qg05XNJCEAwIwnTrHNxuvAqsmLvM+h48 +p4MWxdsC2tmW32sCAwEAAaOCAUYwggFCMA4GA1UdDwEB/wQEAwIBhjAQBgkrBgEE +AYI3FQEEAwIBADAdBgNVHQ4EFgQUrvxfu74FXY+NqlhUc0mUF6taUnIwGQYJKwYB +BAGCNxQCBAweCgBTAHUAYgBDAEEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAW +gBTV9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8v +Y3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRf +MjAxMC0wNi0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRw +Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEw +LTA2LTIzLmNydDANBgkqhkiG9w0BAQsFAAOCAgEAn8m2/27hnDtV9v6LOd1hBG/Q +rWPNF3ZKqEOJjfjG8oxekOHkaKUV7LjTYAxAVx/7XjVyYd6XMWx5oPUWrksc7QEM +7/dXD0IwGGn4oaMul5K4vhv+K4ZeQkIRj45wTZCn/QFj8mS/m+J7CIHPSfI3F9/x ++XLTwx3DkEVN5oAGvf3lamnOs35OMVuEc6jocj8nNcl8IM4Am0/gTLQ2acv3NBER +dBJ6qIwugWymUK0Z+qhGRW+xZ3PDa+NA6CppjyQQ4SlujRaI7o5/ZpMCb1ueBIzM +gRytl1TxGC5+UpC8Ud4qDq5m6rxkbqCRZOQvEqi852u6xxubeRpkZvFDtNHDRiE4 +gXlM+vAxDdN5/3oSpR3Z3ayiD3GC95P/XKFhrmXyFIHteVqah+pge8uzT3U0yrqh +76L2ooBFoYsngc3Vdzg+yk7dKOpYusWgKd6GjIj8lSdR3avT0FsNd8dsj1XX1KIO +W+Q0RhQWHeMc1m2ZrUzscXMvq86ytCneVTBTOToyi/DqnIgSOwVoGb/Ph1IQ+9YT +YPNBZPQIV4HLnRGljvTlJ/WjOuzkPUq3zvmIDZ+9ym3SSrxYdo4yBJRu3fTPbUdt +wtdq3Idx6qS/72eXnLjHgDYqKlnJwAynRKBztYzPOFqu+LuGlfBErWZ6M+1x5EWH +g+WnzqJA0HLSSAD6+Ro= +-----END CERTIFICATE----- |