diff --git a/sys-apps/calculate-client/Manifest b/sys-apps/calculate-client/Manifest index c215056a7..7e1acb609 100644 --- a/sys-apps/calculate-client/Manifest +++ b/sys-apps/calculate-client/Manifest @@ -8,6 +8,7 @@ AUX calculate-client-3.1.6-r1.patch 780 SHA256 ca64bf43d57074087fa46279ed2d8a12a AUX calculate-client-3.1.6-r2.patch 2173 SHA256 d2b167af98dddb8f656b41b802293e717df637ee0e409c9fbbd252afd438fd37 SHA512 a6de3ba61e6940c2f269a2d22cdaeb3d980a6c354387ac6598137100782e837fa25f6f54e8043ed1d869d6c93f2fb35e6a40b2705240bb23b30ba5f255e1fdb6 WHIRLPOOL 64df8bed944d5da2f762c65130e4fedd5fdc61c5ca27d3ba652a2ae7e5e78c39018f29e4b611e3af868aab7ff575c41b7cfd163a21605487f200a312b740847a AUX calculate-client-3.1.7_alpha1-r1.patch 319 SHA256 be0a3ac52e182b1a7462401812942015c75d5c1761fbe1f2bdf5ed722b3a68ac SHA512 2ce50acbdc7d70537ce12d2393e295a0e7a79364b781a42ee7dac4d7efa9d372d1a0591b93da3ad5b111875d8cdd5cb790fad1de9e08dc181d9ae43003ec9b43 WHIRLPOOL 0dde5508d5f71c6abf6e599d16aa64f2a778aee21c1d0a61cf1c1836bfbe5e0b8718173ca712ace8b9f07d1362cde419cf192af2d15f6c660e9527b8019913fe AUX calculate-client-3.1.7_alpha2-r1.patch 990 SHA256 601ccaaab5f55fe9ad29a7f50cee155dd5e32561aa1b0238c02d6df31c94a1ac SHA512 ef4c1bdc7fe15b6cb3349e2da95680cbae674d80fdebb29cb2b07eb756b392ab7dcefeab95a679bd5958c696c3c1e3e79248468e3a6b6cd80957f2179f5bb201 WHIRLPOOL 0dbf102879fff22d263d8e1614f4f238d9f2500c3e0b09ecbea542b4025a60872df4de575cbcb71a2a4f301e377173067a1f2e7df2d62ca6e3a312615ce2572b +AUX calculate-client-3.1.7_alpha2-r2.patch 42362 SHA256 e449b5d47c3195a1fdcd857bdea4039788f75b30a8df8ee04afd132f44de9ff5 SHA512 d583f33ba22ca56fe3106022b9405558fa60022701b31fcfa2288da1a4cd7fd7bb4cd835dce6d662a760007563463f1cc787305ea933ff4f31faf2eefba897dc WHIRLPOOL bc45bc3cfae5f37d281561f075cb357f67f033d7ee2954ce07b98848968288b193058fe98b7e43e7534902e85ab244e1237d7dcf9167628f6c7d885460e0e461 DIST calculate-client-3.1.5.tar.bz2 31578 SHA256 4837b7c296bf4b3a1caa3e0e05156248ec5c32bd5c2e1dd7ae00391fb43f7a02 SHA512 9e3c88764fa7145b649e8348cba140a201de8715f60e48270e4da494fac03619314b9003761c43182d0a3665aba1af76344ca1defeac4b324de8d7c195d7844a WHIRLPOOL 75d00fa10b89be49d6449c24b3a53514ef761f227adb7bf6ef64fbb26ca29489badc6adcf7bba222adbca6a1451003efc39f947005f37aba46fddbabb36628fb DIST calculate-client-3.1.6.tar.bz2 32036 SHA256 00b5ef665b9148f2b5acc913e59534e810ec0a6c93ee037ffc12852bba3ff290 SHA512 0547fd9320f49c1b628e446298366110dbf19eea94b8e2335ec311b69a33352b575eed3a23bbaf5c24ceb602c7166d1da5c7ea73859421b9b2d6955289956790 WHIRLPOOL d725b4396398def4eb6bc0cc6575430e46ec8bb7efefd721d3ee904c0644bbbf6fc87d43fbf9060e2c71465eaed2ff1522631522f2d829527874dd0a379a9488 DIST calculate-client-3.1.7_alpha1.tar.bz2 30055 SHA256 11d54a03bfab353cb305bd7c2d44ae46b6b8769a6a6147bc46abc063c9fe3bca SHA512 d40a1fe73ecc5dbd2d63547f8e9dfe84477a69c1dc4d6a4cffad8a290554fa389fb16d128a31c6044ed4fe9899354038e6b3e201175f6533a1f9203a391c6ecb WHIRLPOOL 89ff1a3b508e0a50c6730edde17f4e1c303eb8c100e339f582ee9c769f06156a53b5c54526f2c7fe215bd1924b3c048b7c0e8410f82d06ecd6e83be75cdb4632 @@ -19,6 +20,7 @@ EBUILD calculate-client-3.1.6.ebuild 806 SHA256 e1fb90f3ff6e73a4a4d3abf66a8bca5a EBUILD calculate-client-3.1.7_alpha1-r1.ebuild 948 SHA256 6bf8169618e987e5730f08a50da6eb209b0e531c6f94d76a508046260c4002a9 SHA512 c1aeefe49949de5f81e59243e30a1983df6654c48f817cf74dcaa869fc7924dee3dd2dba1f1a73b554d2d307362490bd95766d9ffe6558bf9378c081b110d0bf WHIRLPOOL df261015a88d7a4131d1d1521396142624be6911898c4fca816e11e6a1e1100286ae3a582a8b278fe2f0d7ad61a4b2dc29a956fda03288a1d5a35b94fccea62a EBUILD calculate-client-3.1.7_alpha1.ebuild 804 SHA256 ca9b179186ea7c801de61b520f8820e0e2a0775fc27b71b2275a35c25e82fdee SHA512 6433322383b4397117c4ed417f3e4da8708a58256546e7785faf7bd837e278f194db6f60d84a6e1664f992c35ee27d23b56b2e4bae064a54cbe3ac57487d40ec WHIRLPOOL 61ca822797ebbe5117970323933a6836913a7880f153c92c39f88065bfa2522b37310971a08aa057c84fb47b5bb11ac4bc8519c2eaf6363d07d7d1f2e9011347 EBUILD calculate-client-3.1.7_alpha2-r1.ebuild 948 SHA256 190c1f72a745e5cac7836cfb42a9527b0f79d647a142ced153e70235f2cde6dd SHA512 7d3044fb17de19d4047e7edaf6bee8124f09bb6ae7ed62cae4bd13dee70c150281124b2af30045da72daf101128a6a80545df3f1f60f15358edc2a5dddd7255e WHIRLPOOL 89e91034e434c4dd8b79c0d91321fecb84f3328e8f625594b5f953d4defad81514ee449ce76d6e1341c8b00ce08dcbb6d68966593f7662b014ed1c8b0019852d +EBUILD calculate-client-3.1.7_alpha2-r2.ebuild 948 SHA256 d2a450d1c8423d696b8fbd2ad719a9aba4e5b5e7c3eb61ec87d2ad9feb51eaf5 SHA512 12a4548f3ce6eadd3996d78af26038a17a73140be77d7b83f63c1067957112bb1591dc0592bce580d8022008c0cf37775dafd1990d78d0ed3793f68024ba738c WHIRLPOOL c8afe2c60979be86b72384b7ece0c9f3ab2e08aca4c60810d0f32ec5f53c74e1318efa060fbecb952b2a0deb6b4f3338beece6926c8df9f7c125b40a7df56a41 EBUILD calculate-client-3.1.7_alpha2.ebuild 804 SHA256 f7ecfc4ae6cf39f2b14f5888fafe7558ff12881674b0b555d960d838dc4f9ea4 SHA512 ea2ddb82e1102583cfea936f229a936826351d6468a43c34ce22d6a9883220ae7dd4a19768cfa909e0278a8fecdd8a8c176070a728ff2f5402d62eadf4a4a8a3 WHIRLPOOL 6bbad294c7a0a063352a7256002734f1e8501c248acad6666113a4a4708377a430b4e670dbdde7ba7597b684bb4f6ee57f03972d8dac629b6b870ed0a284c361 EBUILD calculate-client-3.1.9999.ebuild 879 SHA256 37385187f78bb708669b5cd2742173b117bb482c784f8f481ab7388554476d65 SHA512 87ebc2dfa965a9bb9d24af13a611e83e412cbabb12957bb14e2a1cd8b9f1951efbf690dcfa8f73711a02cfd0afbc9e9f37209ba9a3884b018c41b3a46e2e847b WHIRLPOOL 349da1bcb076af176079473ccb2fd1a4e3d8eb3ec2a7a6102272d1dd1073a8c181c49e02c89ede4b5cd829856f0c0f5db877b89eb0c6335ad678e58902db293b MISC ChangeLog 21989 SHA256 065aa2c75428e965caef0348105d8e5464d4103f5f2eb16bb626c7a9278208df SHA512 76ad69386d986e2e65448394d738b4d6abbeffb4af38f13dcfbfe8af64796c9b97eda68eb8cbf749fe7ef2711067da430af1cc1a764712e8df853451f903ab57 WHIRLPOOL 58b0a2837255a2eb67606072ac1a6a06e0db7079b563d3b4c9df45b5dbe0fad31c409800da635a337ad976b31bb08549e89063796e8217d46c83ba8b5e22e1b8 diff --git a/sys-apps/calculate-client/calculate-client-3.1.7_alpha2-r2.ebuild b/sys-apps/calculate-client/calculate-client-3.1.7_alpha2-r2.ebuild new file mode 100644 index 000000000..de6f589be --- /dev/null +++ b/sys-apps/calculate-client/calculate-client-3.1.7_alpha2-r2.ebuild @@ -0,0 +1,39 @@ +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI="3" +SUPPORT_PYTHON_ABIS="1" +PYTHON_DEPEND="2:2.7" +RESTRICT_PYTHON_ABIS="2.4 2.5 2.6 3.*" + +inherit distutils eutils + +SRC_URI="ftp://ftp.calculate.ru/pub/calculate/calculate3/${PN}/${P}.tar.bz2" + +DESCRIPTION="The program of setting and storing the user account in the domain" +HOMEPAGE="http://www.calculate-linux.org/main/en/calculate2" +LICENSE="Apache-2.0" +SLOT="3" +KEYWORDS="" + +DEPEND="~sys-apps/calculate-desktop-3.1.7_alpha2 + !=dev-python/python-ldap-2.0[ssl] + >=sys-auth/pam_ldap-180[ssl] + >=sys-auth/nss_ldap-239 + >=sys-apps/keyexec-0.1.2 + sys-apps/keyutils + sys-auth/pam_keystore + sys-auth/pam_client + dev-lang/swig" + +RDEPEND="${DEPEND}" + +src_unpack() { + unpack "${A}" + cd "${S}" + + # apply revision changes + epatch "${FILESDIR}/calculate-client-3.1.7_alpha2-r2.patch" +} diff --git a/sys-apps/calculate-client/files/calculate-client-3.1.7_alpha2-r2.patch b/sys-apps/calculate-client/files/calculate-client-3.1.7_alpha2-r2.patch new file mode 100644 index 000000000..b086004f4 --- /dev/null +++ b/sys-apps/calculate-client/files/calculate-client-3.1.7_alpha2-r2.patch @@ -0,0 +1,816 @@ +diff --git client/utils/cl_client.py client/utils/cl_client.py +index 7513bce..3104f65 100644 +--- client/utils/cl_client.py ++++ client/utils/cl_client.py +@@ -1,6 +1,6 @@ + #-*- coding: utf-8 -*- + +-# Copyright 2010-2013 Calculate Ltd. http://www.calculate-linux.org ++# Copyright 2013 Calculate Ltd. http://www.calculate-linux.org + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. +@@ -24,7 +24,7 @@ from calculate.client.client import ClientError + from calculate.lib.cl_template import TemplatesError + from calculate.lib.utils.files import isMount + +-setLocalTranslate('cl_desktop3',sys.modules[__name__]) ++setLocalTranslate('cl_client3',sys.modules[__name__]) + __ = getLazyLocalTranslate(_) + + class ClClientAction(Action): +@@ -87,7 +87,8 @@ class ClClientAction(Action): + }, + # наложить шаблоны если они не актуальны + {'name':'need_templates', +- 'condition':lambda Get:Get('cl_client_relevance_set') == 'off' ++ 'condition':lambda Get:Get('cl_client_relevance_set') == 'off', ++ 'depend':Tasks.success(inessential=['mount_remote']) + }, + # проверить информацию для ldap расположенную в домене + {'name':'domain:check_domain_info', +@@ -146,341 +147,3 @@ class ClClientAction(Action): + 'depend':Tasks.failed() & Tasks.hasnot("interrupt"), + }, + ] +- +-class ClClientSyncLoginAction(Action): +- """ +- Синхронизировать локальный профиль с удаленным, подключить удаленные +- ресурсы пользователя +- """ +- native_error = (FilesError,ClientError,DesktopError,TemplatesError) +- +- successMessage = None +- failedMessage = None +- interruptMessage = __("Synchronization manually interrupted") +- +- tasks = [ +- # подключить удаленный ресурс домена +- {'name':'mount_remote', +- 'method':'Client.mountRemoteRes(cl_remote_pw,cl_client_remote_path,' +- 'cl_remote_host)', +- 'condition':lambda Get: (Get('cl_remote_host') and +- not isMount(Get('cl_client_remote_path'))), +- }, +- # check on domain user +- {'name':'domain_user', +- 'condition':lambda Get: (Get('os_remote_auth') and +- Get('cl_remote_host') and +- Get('desktop.ur_domain_set') == 'on'), +- 'else_message':__("The local profile will be used") +- }, +- {'name':'domain_user:create_home', +- 'message':__("Creating the home directory for {ur_login}"), +- 'method':'Client.createUserDirectory(ur_home_path,ur_uid,' +- 'ur_gid)', +- 'condition':lambda Get:not path.exists(Get('ur_home_path')) +- }, +- # password in kernel key +- {'name':'domain_user:check_password', +- 'condition':lambda Get:Get('desktop.ur_password'), +- 'else_error':__("User password not found") +- }, +- {'name':'ecryptfs', +- 'message':__("Mounting encrypted data"), +- 'method':'Desktop.createCryptDir(ur_login,ur_uid,ur_gid,' +- 'ur_home_path,True)', +- 'condition':lambda Get:(Get('desktop.ur_home_crypt_set') == 'on' and +- Get('install.cl_autologin') != Get('ur_login')) +- }, +- {'name':'domain_user:add_to_cache', +- 'essential':False, +- 'method':'Client.cAddUserToCache(ur_login,desktop.ur_password)', +- 'failed_warning':__("Unable to cache user info") +- }, +- # подключить удаленные ресурсы пользователя +- {'name':'domain_user:mount_resources', +- 'message':__("Mounting user resources"), +- 'method':'Client.mountUserDomainRes(ur_login,' +- 'desktop.ur_password,' +- 'ur_uid,ur_gid,"unix","share","homes","ftp")', +- }, +- # проверка на попытку открыть вторую сессию для этого пользователя +- {'name':'two_session', +- 'error':__("Second X session for user %s cannot be opened."), +- 'condition':lambda Get:Get('ur_login') in \ +- Get('desktop.cl_desktop_online_user') and \ +- Get('cl_client_sync') == 'on' +- }, +- {'name':'domain_user:domain_sync', +- 'method':'Client.setSyncStatus(ur_home_path,ur_uid,ur_gid,"process")', +- 'condition':lambda Get:Get('cl_client_sync') == 'on' +- }, +- # подключить профиль пользователя на удаленном домене +- # если на нем находится актуальный профиль +- {'name':'domain_sync:repl_profile', +- 'method':'Client.mountUserDomainRes(ur_login,desktop.ur_password,' +- 'ur_uid,ur_gid,"unix","remote_profile")', +- 'condition':lambda Get:Get('cl_replication_host') +- }, +- # проверить расхождение времени между серверами +- #{'name':'repl_profile:check_clock_scew', +- # 'method':'Client.checkClockScew(' +- # 'failed_warning':__("Profile synchronization will be applied " +- # "without archiving") +- #}, +- # отправить команду архивирования профиля на удаленном домене +- # если он новее локального профиля +- {'name':'repl_profile:pack_remote', +- 'method':'Client.packRemote("remote_profile",' +- 'cl_client_local_sync_time,cl_client_pack_time,' +- 'cl_client_profile_name,ur_uid,ur_gid)', +- 'condition':lambda Get:Get('cl_client_sync_replication_set') == 'on', +- 'else_message':__("The local user profile does not " +- "need to be synchronized with remote domain") +- }, +- # монтируем профиль локального домена, если локальный профиль +- # старее удаленного доменного или актуальный профиль +- {'name':'domain_sync:mount_local', +- 'method':'Client.mountUserDomainRes(ur_login,desktop.ur_password,' +- 'ur_uid,ur_gid,"unix")', +- # нет более ранних ошибок и локальный профиль нуждается +- # в синхронизации с удаленным или профиль на локальном домене +- 'depend':(Tasks.success_all('mount_resources') & +- (Tasks.hasnot('repl_profile') | +- Tasks.has('pack_remote'))) +- }, +- # синхронизируем с профилем локального домена +- {'name':'mount_local!:sync_local', +- 'method':'Client.syncLoginProfile(cl_remote_host,ur_uid,' +- 'ur_gid,ur_home_path,"unix",cl_client_profile_name)', +- 'condition':lambda Get:Get('cl_client_sync_local_set') == 'on', +- 'else_message':__("The local user profile does not " +- "need to be synchronized with local domain") +- }, +- # ошибка синхронизации с локальным доменом +- {'name':'local_sync_error', +- 'warning':__("Error synchronizing with the local server {cl_remote_host}"), +- 'depend':Tasks.failed_one_of("mount_local","sync_local") +- }, +- # подключить удаленный профиль пользователя с "репликации" +- {'name':'repl_profile:repeat_repl_profile', +- 'method':'Client.mountUserDomainRes(ur_login,desktop.ur_password,' +- 'ur_uid,ur_gid,"remote_profile")', +- }, +- # ждать архив от удаленного домена +- {'name':'pack_remote:wait_archive', +- 'message': __("Packing the archive on the server"), +- 'method':'Client.waitingArchFile(cl_client_pack_time,' +- 'cl_client_profile_name,"remote_profile")', +- 'failed_warning':__("Failed to find the profile " +- "archive from {cl_replication_host}") +- }, +- # распаковать архив из удаленного домена и удалить +- # файлы которые отсутствуют в удаленном профиле +- {'name':'wait_archive:unpack_profile', +- 'message':__("Unpacking the profile"), +- 'method':'Client.unpackArch(ur_home_path,cl_client_pack_time,' +- 'cl_client_profile_name,"remote_profile")', +- 'failed_warning':__("Failed to unpack") +- }, +- # удалить временные архивы +- {'name':'clean_archfiles', +- 'method':'Client.cleanArchs(cl_client_pack_time,' +- 'cl_client_profile_name,"remote_profile")', +- 'failed_warning':__("Unable to remove useless files"), +- 'essential':False, +- 'depend': Tasks.has('pack_remote') +- }, +- # синхронизировать профиль с удаленным доменом в случае ошибки +- {'name':'repl_profile:sync_remote', +- 'method':'Client.syncLoginProfile(cl_replication_host,ur_uid,' +- 'ur_gid,ur_home_path,"remote_profile",' +- 'cl_client_profile_name)', +- 'depend':Tasks.failed_one_of('pack_remote','mount_local','sync_local', +- 'wait_archive','unpack_profile'), +- 'condition':lambda Select:isMount( +- Select('cl_client_user_mount_path', +- where='cl_client_user_mount_name',eq='remote_profile', +- limit=1)) +- }, +- # если синхронизация с удаленным доменом прошла с ошибкой +- # синхронизировать локальный профиль с локальным доменом +- # как запасной профиль +- {'name':'pack_remote:fallback_warning', +- 'warning':__("Error synchronizing with the remote server " +- "{cl_replication_host}"), +- 'depend': ~Tasks.success_one_of('unpack_profile','sync_remote') +- }, +- {'name':'pack_remote:fallback_sync', +- 'method':'Client.syncLoginProfile(cl_remote_host,ur_uid,' +- 'ur_gid,ur_home_path,"unix",cl_client_profile_name)', +- 'depend': ~Tasks.success_one_of('unpack_profile','sync_remote') +- }, +- # отключить профиль на удаленном домене +- {'name':'repl_profile!:umount_remote_profile', +- 'method':'Client.umountRemoteUserRes(True,"remote_profile")', +- }, +- # сообщение о том, что будет использоваться запасной профиль +- # с локального домена +- {'name':'fallback_sync!:fallback_success', +- 'message': __("Get a user fallback profile from the " +- "{cl_remote_host} domain") +- }, +- # ошибка синхронизации профиль не готов! к использованию +- {'name':'failed', +- 'error':__("Failed to get the user profile from the domain"), +- 'method':'Client.setSyncStatus(ur_home_path,ur_uid,ur_gid,"error")', +- 'depend':Tasks.failed_all('sync_remote','sync_local','fallback_sync') | +- (Tasks.hasnot('domain_sync') & Tasks.failed()) | +- Tasks.failed_one_of('mount_resources') +- }, +- # распаковать ссылки +- {'name':'domain_sync:unpack_links', +- 'method':'Client.unpackLinks(ur_home_path)', +- 'failed_warning': __("Failed to unpack the links archive"), +- 'depend':Tasks.hasnot('failed') +- }, +- # синхронизация профиля завершилась успешно +- {'name':'domain_sync:success_sync', +- 'message':__("Get the user profile from domain"), +- 'method':'Client.setSyncStatus(ur_home_path,ur_uid,ur_gid,"success")', +- 'depend': Tasks.success_all('sync_remote','unpack_links') | +- Tasks.success() +- }, +- # во время синхронизации профиля произошли ошибки, которые не +- # гарантируют целостность профиля +- {'name':'domain_sync:error_sync', +- 'warning':__("Changings in the user profile will not " +- "be saved to the domain"), +- 'method':'Client.setSyncStatus(ur_home_path,ur_uid,ur_gid,"error")', +- 'depend': Tasks.hasnot('success_sync','failed') +- }, +- # отключить ресурсы в случае ошибки +- {'name':'umount_remote_res', +- 'message':__("Umounting user resources"), +- 'method':'Client.umountUserRes(desktop.ur_mount_dirs)', +- 'depend':Tasks.has('failed') +- } +- ] +- +- +-class ClClientSyncLogoutAction(Action): +- """ +- Синхронизировать локальный профиль с удаленным, отключить удаленные +- ресурсы пользователя +- """ +- native_error = (FilesError,ClientError,DesktopError,TemplatesError) +- +- successMessage = None +- failedMessage = None +- interruptMessage = __("Synchronization manually interrupted") +- +- tasks = [ +- # проверка доменный ли пользователь +- {'name':'domain_user', +- 'condition':lambda Get: (Get('os_remote_auth') and +- Get('cl_remote_host') and +- Get('desktop.ur_domain_set') == 'on'), +- 'else_message':__("The local profile is used") +- }, +- # проверка на попытку отключить ресурсы пользователя в X сессии +- {'name':'domain_user:in_xsession', +- 'error':__("User {ur_login} is already in X session"), +- 'condition':lambda Get:Get('ur_login') in \ +- Get('desktop.cl_desktop_online_user'), +- }, +- # проверить наличие домашней директории +- {'name':'domain_user:check_homedir', +- 'condition':lambda Get:path.exists(Get('ur_home_path')), +- 'else_error':__("User home directory {ur_home_path} not found"), +- }, +- # проверить наличие подключенных ресурсов +- {'name':'check_mount', +- 'condition':lambda Get:any(x and isMount(x) +- for x in Get('cl_client_user_mount_path')), +- 'else_error':__("User remote resources not found") +- }, +- # установить время выхода из сеанса +- {'name':'domain_user:set_logout_date', +- 'method':'Client.setLogoutDate(ur_home_path,ur_uid,ur_gid)' +- }, +- # выполнять ли синхронизацию +- {'name':'domain_user:domain_sync', +- 'condition':lambda Get:Get('cl_client_sync_status') == 'success' and +- Get('cl_client_sync') == 'on', +- 'else_warning':__("Profile will not be upload to domain") +- }, +- # переместить файлы из профиля в Moved +- {'name':'domain_user:move_home_dir', +- 'message':__("Moving not profile files to Home/Moved directory"), +- 'method':'Client.moveHomeDir(ur_home_path,"Moved","homes",' +- 'cl_moved_skip_path)', +- }, +- # архивировать симлинки +- {'name':'domain_sync:tar_symlinks', +- 'method':'Client.tarSymLinks(ur_uid,ur_gid,ur_home_path,' +- 'cl_sync_del_path,cl_sync_skip_path)', +- 'failed_error':_("Failed to make a links archive") +- }, +- # закачать профиль пользователя в домен +- {'name':'domain_sync:sync_logout', +- 'method':'Client.syncLogoutProfile(cl_remote_host,ur_uid,' +- 'ur_gid,ur_home_path,"unix",cl_client_profile_name,' +- 'cl_client_symlinks)', +- }, +- # удалить файлы, которые могут помешать следующему входу в сеанс +- {'name':'domain_sync:remove_noise_files', +- 'message':__("Removing hindering files"), +- 'method':'Client.removeNoiseFiles(ur_home_path)' +- }, +- # удалить "личные" файлы +- {'name':'domain_sync:remove_private_files', +- 'message':__("Removing user private files"), +- 'method':'Client.removePrivateFiles(ur_home_path)' +- }, +- # удалить пользовательские ключи ядра +- {'name':'skip:clear_user_key', +- 'message':__("Clearing user key"), +- 'method':'Client.clearUserKey(ur_login)' +- }, +- # отключить пользовательские ресурсы +- {'name':'check_mount!:umount_user_res', +- 'message':__("Umounting user resources"), +- 'method':'Client.umountUserRes(desktop.ur_mount_dirs)', +- }, +- # установить статус синхронизации +- {'name':'domain_sync:success_sync', +- 'message':__("Modified user profile saved in the domain"), +- 'method':'Client.setSyncStatus(ur_home_path,ur_uid,ur_gid,' +- '"success_logout")', +- 'depend': Tasks.success_all('sync_logout','check_mount') +- }, +- {'name':'domain_sync:failed', +- 'error':__("Modified user profile saved in the domain with errors"), +- 'method':'Client.setSyncStatus(ur_home_path,ur_uid,ur_gid,' +- '"error")', +- 'depend': Tasks.hasnot('success_sync') +- }, +- {'name':'umount_allres', +- 'method':'Desktop.umountUserRes(ur_home_path)', +- } +- ] +- +-class ClPasswdAction(Action): +- """ +- Изменить пароль доменного пользователя +- """ +- # ошибки, которые отображаются без подробностей +- native_error = (FilesError,DesktopError,TemplatesError) +- +- successMessage = (__("{cl_client_login}'s password changed\n" +- "The password will be changed when you log out" +- "from the X session")) +- failedMessage = __("Failed to change password") +- interruptMessage = __("Logout manually interrupted") +- +- # список задач для действия +- tasks = [ +- {'name':'change_passwd', +- 'method':'Client.clientPasswd(cl_client_login,ur_uid,ur_gid,' +- 'ur_home_path,ur_user_new_pw,ur_user_pw)', +- }] +diff --git client/utils/cl_client_sync.py client/utils/cl_client_sync.py +new file mode 100644 +index 0000000..b5f53bf +--- /dev/null ++++ client/utils/cl_client_sync.py +@@ -0,0 +1,345 @@ ++#-*- coding: utf-8 -*- ++ ++# Copyright 2013 Calculate Ltd. http://www.calculate-linux.org ++# ++# Licensed under the Apache License, Version 2.0 (the "License"); ++# you may not use this file except in compliance with the License. ++# You may obtain a copy of the License at ++# ++# http://www.apache.org/licenses/LICENSE-2.0 ++# ++# Unless required by applicable law or agreed to in writing, software ++# distributed under the License is distributed on an "AS IS" BASIS, ++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++# See the License for the specific language governing permissions and ++# limitations under the License. ++ ++import sys ++from os import path ++from calculate.core.server.func import Action,Tasks ++from calculate.lib.cl_lang import setLocalTranslate,getLazyLocalTranslate ++from calculate.lib.utils.files import FilesError ++from calculate.desktop.desktop import DesktopError ++from calculate.client.client import ClientError ++from calculate.lib.cl_template import TemplatesError ++ ++setLocalTranslate('cl_client3',sys.modules[__name__]) ++__ = getLazyLocalTranslate(_) ++ ++class ClClientSyncLoginAction(Action): ++ """ ++ Синхронизировать локальный профиль с удаленным, подключить удаленные ++ ресурсы пользователя ++ """ ++ native_error = (FilesError,ClientError,DesktopError,TemplatesError) ++ ++ successMessage = None ++ failedMessage = None ++ interruptMessage = __("Synchronization manually interrupted") ++ ++ tasks = [ ++ # подключить удаленный ресурс домена ++ {'name':'mount_remote', ++ 'method':'Client.mountRemoteRes(cl_remote_pw,cl_client_remote_path,' ++ 'cl_remote_host)', ++ 'condition':lambda Get: (Get('cl_remote_host') and ++ not isMount(Get('cl_client_remote_path'))), ++ }, ++ # check on domain user ++ {'name':'domain_user', ++ 'condition':lambda Get: (Get('os_remote_auth') and ++ Get('cl_remote_host') and ++ Get('desktop.ur_domain_set') == 'on'), ++ 'else_message':__("The local profile will be used") ++ }, ++ {'name':'domain_user:create_home', ++ 'message':__("Creating the home directory for {ur_login}"), ++ 'method':'Client.createUserDirectory(ur_home_path,ur_uid,' ++ 'ur_gid)', ++ 'condition':lambda Get:not path.exists(Get('ur_home_path')) ++ }, ++ # password in kernel key ++ {'name':'domain_user:check_password', ++ 'condition':lambda Get:Get('desktop.ur_password'), ++ 'else_error':__("User password not found") ++ }, ++ {'name':'ecryptfs', ++ 'message':__("Mounting encrypted data"), ++ 'method':'Desktop.createCryptDir(ur_login,ur_uid,ur_gid,' ++ 'ur_home_path,True)', ++ 'condition':lambda Get:(Get('desktop.ur_home_crypt_set') == 'on' and ++ Get('install.cl_autologin') != Get('ur_login')) ++ }, ++ {'name':'domain_user:add_to_cache', ++ 'essential':False, ++ 'method':'Client.cAddUserToCache(ur_login,desktop.ur_password)', ++ 'failed_warning':__("Unable to cache user info") ++ }, ++ # подключить удаленные ресурсы пользователя ++ {'name':'domain_user:mount_resources', ++ 'message':__("Mounting user resources"), ++ 'method':'Client.mountUserDomainRes(ur_login,' ++ 'desktop.ur_password,' ++ 'ur_uid,ur_gid,"unix","share","homes","ftp")', ++ }, ++ # проверка на попытку открыть вторую сессию для этого пользователя ++ {'name':'two_session', ++ 'error':__("Second X session for user %s cannot be opened."), ++ 'condition':lambda Get:Get('ur_login') in \ ++ Get('desktop.cl_desktop_online_user') and \ ++ Get('cl_client_sync') == 'on' ++ }, ++ {'name':'domain_user:domain_sync', ++ 'method':'Client.setSyncStatus(ur_home_path,ur_uid,ur_gid,"process")', ++ 'condition':lambda Get:Get('cl_client_sync') == 'on' ++ }, ++ # подключить профиль пользователя на удаленном домене ++ # если на нем находится актуальный профиль ++ {'name':'domain_sync:repl_profile', ++ 'method':'Client.mountUserDomainRes(ur_login,desktop.ur_password,' ++ 'ur_uid,ur_gid,"unix","remote_profile")', ++ 'condition':lambda Get:Get('cl_replication_host') ++ }, ++ # проверить расхождение времени между серверами ++ #{'name':'repl_profile:check_clock_scew', ++ # 'method':'Client.checkClockScew(' ++ # 'failed_warning':__("Profile synchronization will be applied " ++ # "without archiving") ++ #}, ++ # отправить команду архивирования профиля на удаленном домене ++ # если он новее локального профиля ++ {'name':'repl_profile:pack_remote', ++ 'method':'Client.packRemote("remote_profile",' ++ 'cl_client_local_sync_time,cl_client_pack_time,' ++ 'cl_client_profile_name,ur_uid,ur_gid)', ++ 'condition':lambda Get:Get('cl_client_sync_replication_set') == 'on', ++ 'else_message':__("The local user profile does not " ++ "need to be synchronized with remote domain") ++ }, ++ # монтируем профиль локального домена, если локальный профиль ++ # старее удаленного доменного или актуальный профиль ++ {'name':'domain_sync:mount_local', ++ 'method':'Client.mountUserDomainRes(ur_login,desktop.ur_password,' ++ 'ur_uid,ur_gid,"unix")', ++ # нет более ранних ошибок и локальный профиль нуждается ++ # в синхронизации с удаленным или профиль на локальном домене ++ 'depend':(Tasks.success_all('mount_resources') & ++ (Tasks.hasnot('repl_profile') | ++ Tasks.has('pack_remote'))) ++ }, ++ # синхронизируем с профилем локального домена ++ {'name':'mount_local!:sync_local', ++ 'method':'Client.syncLoginProfile(cl_remote_host,ur_uid,' ++ 'ur_gid,ur_home_path,"unix",cl_client_profile_name)', ++ 'condition':lambda Get:Get('cl_client_sync_local_set') == 'on', ++ 'else_message':__("The local user profile does not " ++ "need to be synchronized with local domain") ++ }, ++ # ошибка синхронизации с локальным доменом ++ {'name':'local_sync_error', ++ 'warning':__("Error synchronizing with the local server {cl_remote_host}"), ++ 'depend':Tasks.failed_one_of("mount_local","sync_local") ++ }, ++ # подключить удаленный профиль пользователя с "репликации" ++ {'name':'repl_profile:repeat_repl_profile', ++ 'method':'Client.mountUserDomainRes(ur_login,desktop.ur_password,' ++ 'ur_uid,ur_gid,"remote_profile")', ++ }, ++ # ждать архив от удаленного домена ++ {'name':'pack_remote:wait_archive', ++ 'message': __("Packing the archive on the server"), ++ 'method':'Client.waitingArchFile(cl_client_pack_time,' ++ 'cl_client_profile_name,"remote_profile")', ++ 'failed_warning':__("Failed to find the profile " ++ "archive from {cl_replication_host}") ++ }, ++ # распаковать архив из удаленного домена и удалить ++ # файлы которые отсутствуют в удаленном профиле ++ {'name':'wait_archive:unpack_profile', ++ 'message':__("Unpacking the profile"), ++ 'method':'Client.unpackArch(ur_home_path,cl_client_pack_time,' ++ 'cl_client_profile_name,"remote_profile")', ++ 'failed_warning':__("Failed to unpack") ++ }, ++ # удалить временные архивы ++ {'name':'clean_archfiles', ++ 'method':'Client.cleanArchs(cl_client_pack_time,' ++ 'cl_client_profile_name,"remote_profile")', ++ 'failed_warning':__("Unable to remove useless files"), ++ 'essential':False, ++ 'depend': Tasks.has('pack_remote') ++ }, ++ # синхронизировать профиль с удаленным доменом в случае ошибки ++ {'name':'repl_profile:sync_remote', ++ 'method':'Client.syncLoginProfile(cl_replication_host,ur_uid,' ++ 'ur_gid,ur_home_path,"remote_profile",' ++ 'cl_client_profile_name)', ++ 'depend':Tasks.failed_one_of('pack_remote','mount_local','sync_local', ++ 'wait_archive','unpack_profile'), ++ 'condition':lambda Select:isMount( ++ Select('cl_client_user_mount_path', ++ where='cl_client_user_mount_name',eq='remote_profile', ++ limit=1)) ++ }, ++ # если синхронизация с удаленным доменом прошла с ошибкой ++ # синхронизировать локальный профиль с локальным доменом ++ # как запасной профиль ++ {'name':'pack_remote:fallback_warning', ++ 'warning':__("Error synchronizing with the remote server " ++ "{cl_replication_host}"), ++ 'depend': ~Tasks.success_one_of('unpack_profile','sync_remote') ++ }, ++ {'name':'pack_remote:fallback_sync', ++ 'method':'Client.syncLoginProfile(cl_remote_host,ur_uid,' ++ 'ur_gid,ur_home_path,"unix",cl_client_profile_name)', ++ 'depend': ~Tasks.success_one_of('unpack_profile','sync_remote') ++ }, ++ # отключить профиль на удаленном домене ++ {'name':'repl_profile!:umount_remote_profile', ++ 'method':'Client.umountRemoteUserRes(True,"remote_profile")', ++ }, ++ # сообщение о том, что будет использоваться запасной профиль ++ # с локального домена ++ {'name':'fallback_sync!:fallback_success', ++ 'message': __("Get a user fallback profile from the " ++ "{cl_remote_host} domain") ++ }, ++ # ошибка синхронизации профиль не готов! к использованию ++ {'name':'failed', ++ 'error':__("Failed to get the user profile from the domain"), ++ 'method':'Client.setSyncStatus(ur_home_path,ur_uid,ur_gid,"error")', ++ 'depend':Tasks.failed_all('sync_remote','sync_local','fallback_sync') | ++ (Tasks.hasnot('domain_sync') & Tasks.failed()) | ++ Tasks.failed_one_of('mount_resources') ++ }, ++ # распаковать ссылки ++ {'name':'domain_sync:unpack_links', ++ 'method':'Client.unpackLinks(ur_home_path)', ++ 'failed_warning': __("Failed to unpack the links archive"), ++ 'depend':Tasks.hasnot('failed') ++ }, ++ # синхронизация профиля завершилась успешно ++ {'name':'domain_sync:success_sync', ++ 'message':__("Get the user profile from domain"), ++ 'method':'Client.setSyncStatus(ur_home_path,ur_uid,ur_gid,"success")', ++ 'depend': Tasks.success_all('sync_remote','unpack_links') | ++ Tasks.success() ++ }, ++ # во время синхронизации профиля произошли ошибки, которые не ++ # гарантируют целостность профиля ++ {'name':'domain_sync:error_sync', ++ 'warning':__("Changings in the user profile will not " ++ "be saved to the domain"), ++ 'method':'Client.setSyncStatus(ur_home_path,ur_uid,ur_gid,"error")', ++ 'depend': Tasks.hasnot('success_sync','failed') ++ }, ++ # отключить ресурсы в случае ошибки ++ {'name':'umount_remote_res', ++ 'message':__("Umounting user resources"), ++ 'method':'Client.umountUserRes(desktop.ur_mount_dirs)', ++ 'depend':Tasks.has('failed') ++ } ++ ] ++ ++ ++class ClClientSyncLogoutAction(Action): ++ """ ++ Синхронизировать локальный профиль с удаленным, отключить удаленные ++ ресурсы пользователя ++ """ ++ native_error = (FilesError,ClientError,DesktopError,TemplatesError) ++ ++ successMessage = None ++ failedMessage = None ++ interruptMessage = __("Synchronization manually interrupted") ++ ++ tasks = [ ++ # проверка доменный ли пользователь ++ {'name':'domain_user', ++ 'condition':lambda Get: (Get('os_remote_auth') and ++ Get('cl_remote_host') and ++ Get('desktop.ur_domain_set') == 'on'), ++ 'else_message':__("The local profile is used") ++ }, ++ # проверка на попытку отключить ресурсы пользователя в X сессии ++ {'name':'domain_user:in_xsession', ++ 'error':__("User {ur_login} is already in X session"), ++ 'condition':lambda Get:Get('ur_login') in \ ++ Get('desktop.cl_desktop_online_user'), ++ }, ++ # проверить наличие домашней директории ++ {'name':'domain_user:check_homedir', ++ 'condition':lambda Get:path.exists(Get('ur_home_path')), ++ 'else_error':__("User home directory {ur_home_path} not found"), ++ }, ++ # проверить наличие подключенных ресурсов ++ {'name':'check_mount', ++ 'condition':lambda Get:any(x and isMount(x) ++ for x in Get('cl_client_user_mount_path')), ++ 'else_error':__("User remote resources not found") ++ }, ++ # установить время выхода из сеанса ++ {'name':'domain_user:set_logout_date', ++ 'method':'Client.setLogoutDate(ur_home_path,ur_uid,ur_gid)' ++ }, ++ # выполнять ли синхронизацию ++ {'name':'domain_user:domain_sync', ++ 'condition':lambda Get:Get('cl_client_sync_status') == 'success' and ++ Get('cl_client_sync') == 'on', ++ 'else_warning':__("Profile will not be upload to domain") ++ }, ++ # переместить файлы из профиля в Moved ++ {'name':'domain_user:move_home_dir', ++ 'message':__("Moving not profile files to Home/Moved directory"), ++ 'method':'Client.moveHomeDir(ur_home_path,"Moved","homes",' ++ 'cl_moved_skip_path)', ++ }, ++ # архивировать симлинки ++ {'name':'domain_sync:tar_symlinks', ++ 'method':'Client.tarSymLinks(ur_uid,ur_gid,ur_home_path,' ++ 'cl_sync_del_path,cl_sync_skip_path)', ++ 'failed_error':_("Failed to make a links archive") ++ }, ++ # закачать профиль пользователя в домен ++ {'name':'domain_sync:sync_logout', ++ 'method':'Client.syncLogoutProfile(cl_remote_host,ur_uid,' ++ 'ur_gid,ur_home_path,"unix",cl_client_profile_name,' ++ 'cl_client_symlinks)', ++ }, ++ # удалить файлы, которые могут помешать следующему входу в сеанс ++ {'name':'domain_sync:remove_noise_files', ++ 'message':__("Removing hindering files"), ++ 'method':'Client.removeNoiseFiles(ur_home_path)' ++ }, ++ # удалить "личные" файлы ++ {'name':'domain_sync:remove_private_files', ++ 'message':__("Removing user private files"), ++ 'method':'Client.removePrivateFiles(ur_home_path)' ++ }, ++ # удалить пользовательские ключи ядра ++ {'name':'skip:clear_user_key', ++ 'message':__("Clearing user key"), ++ 'method':'Client.clearUserKey(ur_login)' ++ }, ++ # отключить пользовательские ресурсы ++ {'name':'check_mount!:umount_user_res', ++ 'message':__("Umounting user resources"), ++ 'method':'Client.umountUserRes(desktop.ur_mount_dirs)', ++ }, ++ # установить статус синхронизации ++ {'name':'domain_sync:success_sync', ++ 'message':__("Modified user profile saved in the domain"), ++ 'method':'Client.setSyncStatus(ur_home_path,ur_uid,ur_gid,' ++ '"success_logout")', ++ 'depend': Tasks.success_all('sync_logout','check_mount') ++ }, ++ {'name':'domain_sync:failed', ++ 'error':__("Modified user profile saved in the domain with errors"), ++ 'method':'Client.setSyncStatus(ur_home_path,ur_uid,ur_gid,' ++ '"error")', ++ 'depend': Tasks.hasnot('success_sync') ++ }, ++ {'name':'check_mount!:umount_allres', ++ 'method':'Desktop.umountUserRes(ur_home_path)', ++ } ++ ] +diff --git client/utils/cl_passwd.py client/utils/cl_passwd.py +new file mode 100644 +index 0000000..18323eb +--- /dev/null ++++ client/utils/cl_passwd.py +@@ -0,0 +1,47 @@ ++#-*- coding: utf-8 -*- ++ ++# Copyright 2013 Calculate Ltd. http://www.calculate-linux.org ++# ++# Licensed under the Apache License, Version 2.0 (the "License"); ++# you may not use this file except in compliance with the License. ++# You may obtain a copy of the License at ++# ++# http://www.apache.org/licenses/LICENSE-2.0 ++# ++# Unless required by applicable law or agreed to in writing, software ++# distributed under the License is distributed on an "AS IS" BASIS, ++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++# See the License for the specific language governing permissions and ++# limitations under the License. ++ ++import sys ++from os import path ++from calculate.core.server.func import Action,Tasks ++from calculate.lib.cl_lang import setLocalTranslate,getLazyLocalTranslate ++from calculate.lib.utils.files import FilesError ++from calculate.desktop.desktop import DesktopError ++from calculate.client.client import ClientError ++from calculate.lib.cl_template import TemplatesError ++ ++setLocalTranslate('cl_client3',sys.modules[__name__]) ++__ = getLazyLocalTranslate(_) ++ ++class ClPasswdAction(Action): ++ """ ++ Изменить пароль доменного пользователя ++ """ ++ # ошибки, которые отображаются без подробностей ++ native_error = (FilesError,DesktopError,TemplatesError,ClientError) ++ ++ successMessage = (__("{cl_client_login}'s password changed\n" ++ "The password will be changed when you log out" ++ "from the X session")) ++ failedMessage = __("Failed to change password") ++ interruptMessage = __("Logout manually interrupted") ++ ++ # список задач для действия ++ tasks = [ ++ {'name':'change_passwd', ++ 'method':'Client.clientPasswd(cl_client_login,ur_uid,ur_gid,' ++ 'ur_home_path,ur_user_new_pw,ur_user_pw)', ++ }] +diff --git client/variables/client.py client/variables/client.py +index 88f7ab5..4620e81 100644 +--- client/variables/client.py ++++ client/variables/client.py +@@ -296,6 +296,9 @@ class VariableClClientRelevanceSet(ReadonlyVariable): + # если изменился домен + if self.Get('cl_remote_host') != self.Get("os_remote_auth"): + return "off" ++ if (self.Get('cl_remote_host') and ++ not isMount(self.Get('cl_client_remote_path'))): ++ return "off" + currentVersion = self.Get("cl_ver") + # версия программы, который были наложены шаблоны + previousVersion = self.Get("os_remote_client") +diff --git client/wsdl_client.py client/wsdl_client.py +index 2bd0ee6..90b2302 100644 +--- client/wsdl_client.py ++++ client/wsdl_client.py +@@ -19,15 +19,16 @@ from calculate.lib.datavars import VariableError, DataVarsError + from calculate.core.server.func import WsdlBase + from calculate.desktop.desktop import DesktopError + from client import ClientError +-from utils.cl_client import (ClClientAction, ClClientSyncLoginAction, +- ClClientSyncLogoutAction, ClPasswdAction) ++from utils.cl_client import ClClientAction ++from utils.cl_passwd import ClPasswdAction ++from utils.cl_client_sync import (ClClientSyncLoginAction, ++ ClClientSyncLogoutAction) + import calculate.desktop.desktop as desktop + import calculate.client.client as client +-import calculate.install.install as install + + from calculate.lib.cl_lang import setLocalTranslate, getLazyLocalTranslate + +-setLocalTranslate('cl_desktop3', sys.modules[__name__]) ++setLocalTranslate('cl_client3', sys.modules[__name__]) + __ = getLazyLocalTranslate(_) + + diff --git a/sys-apps/calculate-desktop/Manifest b/sys-apps/calculate-desktop/Manifest index b3933ca43..cf2e398dd 100644 --- a/sys-apps/calculate-desktop/Manifest +++ b/sys-apps/calculate-desktop/Manifest @@ -9,6 +9,7 @@ AUX calculate-desktop-3.1.6-r3.patch 4933 SHA256 bf7dab7ccd1c5f85dd14867200eff81 AUX calculate-desktop-3.1.6-r4.patch 7626 SHA256 090e972f5ffd59d874c5eb107d423c36d878082d3a929c6a2272d8ab7694de0d SHA512 b404f912d84b83defab928dc9b12e518c791cb413b3a0bad032639baed07e489284d7be99cae73c2eb8e5fd963a4033da371e63dab1b4fd166bc807db9e0ad8a WHIRLPOOL 90548428c83ff76874a453de9315cb6ff05f4dbdbc29a5e8839c5dfef404c24cf5d968ed014fd6903d0902baef8c4ef1bbe5e4db22c0e0fcfc1ad422201888ad AUX calculate-desktop-3.1.7_alpha2-r1.patch 1955 SHA256 fd5f4f1786521d618dd2759d029666450daa13d6b3c6581e8add24c53b24b3bb SHA512 8cade53503a0999fadc1e217b303479d748f9bba571b46a6b63089e8ac83e37d6734e71cbe3c4b3870f750b8a76e81b849aee0fef7b8b8e7946aebdc21c2d8b8 WHIRLPOOL 013973d33f4a664e9f8c1dfcd63aa5efb934bb9e28a33e8908a690075160337ea56c1cc165c988f83a8e6b5177f9baa367720fde29ac5f63cc2284a7a1d4ce6b AUX calculate-desktop-3.1.7_alpha2-r2.patch 4001 SHA256 2873c5fe8fa4f6be71781ae79159fde8df702f5cab6bbc8ac31336ec61235f44 SHA512 3111f8ceebe6fd17d4f17ed9bbc54af53f3643f6fa07125db112408c9e7b669aeb2d03a77bd24d67daa65e9421ddc35ff3dbf93b80448e85f4f95ab728205114 WHIRLPOOL 8747eeb835e6e8c70485c6c5f9d5765b3aa3be56c833c34f1768c11982ffd4e46dc9b83a35e64f8a23c3b6aa105ba3da3ed4d5303de71a5f2c356ca9eae59b46 +AUX calculate-desktop-3.1.7_alpha2-r3.patch 4035 SHA256 0581fcf7a8f6228d240eba875830d3a32d267738441a1cb14058d11206ce1599 SHA512 064456a36943d5ae0ec787040a60902b5f6b870f91537807b42309eb04fde18ad1a4fa3575e7d7a16b62ddda7c32b1e7f25389a6353e1f4aee5f56ce72872e85 WHIRLPOOL 158ff3437b9cde790120271bcded5bfc15fffb70f4d1e05381cee3cd1bb0362e34c55bfbb333715d6f1b197356cd025454056bc1ed0589e05e6a47d9b4e3c8db DIST calculate-desktop-3.1.5.tar.bz2 13368 SHA256 58630f5f47b5f5ffcc137a32a95b4077ac540c38ed619ab0bb5a3db51e1757f4 SHA512 2ea99d923a43de91a9791dfa71cc546af3f6ffba31859b895d7e03e1975fdcd43a63ef220eeefaee444f43eb33970a52f223dcbe420b3ab208c902f67ba7bbf1 WHIRLPOOL 418949fe17a2b0d9178a017a761e8cd9c2f1f926384d5c784e638598618f6f6f4ae36c469717adabbc9deacb32692a4fa05ed8cef5f477d14eba156257debbc9 DIST calculate-desktop-3.1.6.tar.bz2 15486 SHA256 46782f98e36239851cbc6c4f51003b0eccd319cb86f9eccfce3b87009b217954 SHA512 61ce9a4df56a2f745ea754aba6284c3a23cd7268424c4f4a18bc0ed11d39b8c0fbacf59c7c49aa68addb16ecaa16640ac0ba430aef22ab9b186b8f7e7d63e0b4 WHIRLPOOL d039df01e9abb76590dc72212719579dab14db9398d8a961f8c82c88e6ac1b65787dc70713bc593782b8582f1e2d12e7bbb1c216b92b7b2f47581916bd394812 DIST calculate-desktop-3.1.7_alpha1.tar.bz2 16658 SHA256 22b4a12f8d6fa7feeadf7683404304bc956338866f7c0dc7a15fe9d2a738e6c7 SHA512 466b015e58ed5c99bfcf458a6956896352d530ed94684b748a4551ee239c6cc5458eae860ccae0d98e0eaf018e9004668fd735e02724caf830796f2a70246ebb WHIRLPOOL 30e8113d61b5c3e0cd138d0011ad5fa0110069b4fdda3b155ce02ff58e5fcae09e5559ea1f1725be12eb7e6350d1c2cb4756a421d5727a460e19b949067e876c @@ -22,6 +23,7 @@ EBUILD calculate-desktop-3.1.6.ebuild 765 SHA256 02b68a3668c08466e55dae5fceecd5d EBUILD calculate-desktop-3.1.7_alpha1.ebuild 761 SHA256 c6c79e09c4ef8a35269c8b3ebdffe56e1e8c695d0cc5a2961501f2e1270fa3f5 SHA512 043bb40c89fed025e574615e178a958a04f36cff6e8ad85bdeb320ea1bfd384d18c24a012f0e4c3383d510efdef3e60f1f4755afa7361e90caa31d5093636705 WHIRLPOOL 06a35dcffee31f987c9a92e04219fcaad49e7c80b3ffd71d1bb457a759bae734a4e76ccb3dd1419d1015531a8636d2e79669e2979722da10e2fa6d65508dccd6 EBUILD calculate-desktop-3.1.7_alpha2-r1.ebuild 906 SHA256 036ac091e41e4f797aadea07688051ff62e93a094357293bbf5c792a34c2344c SHA512 dd69d6b7c5bc749f5ab99b28b798f08134162af896a6d8da29bdf468b98f016cdb4174f52227f05a474e8a5894405899cfc093fbae83dd6e75a48dce693b47a0 WHIRLPOOL 525acf8aff4c8b1785a0fb5dfb5563b7cda933f69eb0befb0b11ccd1a72242310476de01cd9b4fa16850607f09f73240042d2a633c5a68ca5bea17e56d32e4bd EBUILD calculate-desktop-3.1.7_alpha2-r2.ebuild 906 SHA256 4babec8e4ac50afedf8d6011e8415389114c8f68f6c971c0424466c2bbdf57bd SHA512 f06b6797608001bbc27a261aa8b459b7ffbb321bddac19f4eafff11e9ff51cefc9623dd7cb3c86ddeff24b28f0478b42c6dae9aa4242d40de1a415505cb3946e WHIRLPOOL eb6677bcc83a6c6919f96df24967a8d51b845edf5aca14ba6ae8f2fd9fb9b4417c6a804c916c302fadbc2955d85bd8208dca94a7cb1f26a826ea9522426b8f16 +EBUILD calculate-desktop-3.1.7_alpha2-r3.ebuild 906 SHA256 922963fdbcccc69b6787cb65bdc5535c767c1c5113df54dcf80ced40f91b3cde SHA512 b682521c69f8a725561a12f47a89f52a8fa6e452945ac5a5bab7436f14490b889165ccb98db38cbcd2a1c971a849fad789b9724990ef053cf8d8960640a0a1bf WHIRLPOOL 889918dd568bd277ba8b0ed1cc9c440e9f519c7ef512b6c705f88f34944efeafa3f5e0911fc90d15a41b3033ba4a3e2645fd7b3e2c57a23958326af7384059d3 EBUILD calculate-desktop-3.1.7_alpha2.ebuild 761 SHA256 2cca3d7860eb91c04ad4df6aa09fa0834782f8befc5943cfc03a4f8d630a753f SHA512 f77103036195537faf8f11b72ae33db37751d9343cafedfb4f14d97f82a9b3d9b830e6acce8f508cc0435c2ba2767d48937a3cef9126f699ac1f7a45349a9a82 WHIRLPOOL 2ba1693b4407c5024b4eee4d57fb6cb21afc721ee469ab94af57a1a6a206aeddeb12a1894e994e38db29fb91f6c95b28aff7d3ebfb5d8c451c6dbf92bf2f12df EBUILD calculate-desktop-3.1.9999.ebuild 976 SHA256 405de66b0f54804d4bc025fe786c21ca1a040d6a25928a535efbf84cacd7f505 SHA512 69ebfdc4c04f7c236f728c9938a5538b3822369cc1e1de2593a6e83178b5441ea2e37068ffcd9cf17aa92bcf00ee133ee98da0be5a5f591d69755e1159eeadac WHIRLPOOL c61f805379983ca23af188ff60a99511251a8afb27b75d0c1f08595012a579c42c2ef36603d837865a155706780ba413f0cac74457425eea0e0a59488e3dfda2 MISC ChangeLog 16440 SHA256 2a1c3211586d5dd10a249b61e4a8abf96a27a0c4d1706715b8a563bfa8aabf07 SHA512 962d9b69daeef659f2e1d6f2a5c974d6ed152d22fa9f0ed8c35d4c27e901f976167a2fc260a71c798be29d0161c7e90fa030957b2f74e25dcf35ecdb8fdc69e4 WHIRLPOOL df646b1f4c914fcb7142365b2110eb5112f7653cfddaf1b8a79f4a8f4ac99d50b6be59d3d593a8fb9e754ed92ebbe9a2cdebe320b0941d2ddd1bb9fba85c20b0 diff --git a/sys-apps/calculate-desktop/calculate-desktop-3.1.7_alpha2-r3.ebuild b/sys-apps/calculate-desktop/calculate-desktop-3.1.7_alpha2-r3.ebuild new file mode 100644 index 000000000..c48cca903 --- /dev/null +++ b/sys-apps/calculate-desktop/calculate-desktop-3.1.7_alpha2-r3.ebuild @@ -0,0 +1,39 @@ +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI="3" + +SUPPORT_PYTHON_ABIS="1" +PYTHON_DEPEND="2:2.7" +RESTRICT_PYTHON_ABIS="2.4 2.5 2.6 3.*" + +inherit distutils eutils + +SRC_URI="ftp://ftp.calculate.ru/pub/calculate/calculate3/${PN}/${P}.tar.bz2" + +DESCRIPTION="The program of the desktop configuration Calculate Linux" +HOMEPAGE="http://www.calculate-linux.org/main/en/calculate2" +LICENSE="Apache-2.0" +SLOT="3" +KEYWORDS="" +IUSE="" + +DEPEND="~sys-apps/calculate-core-3.1.7_alpha2 + >=dev-python/python-ldap-2.0[ssl] + media-gfx/feh + x11-apps/xmessage + !