From 1f584fd1dd9c68095608704436c8f70e5ecfc31a Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 9 Jun 2022 01:19:53 +0200 Subject: [PATCH 1/2] Upgrade to 1.0.6155~ynh1 --- .gitignore | 2 - README.md | 2 +- README_fr.md | 2 +- check_process | 2 + conf/jitsi-jicofo.src | 4 +- conf/jitsi-meet-config.js | 198 +++++++++++++++++++++++++++++------- conf/jitsi-meet-prosody.src | 4 +- conf/jitsi-meet-web.src | 4 +- conf/jitsi-videobridge.src | 4 +- manifest.json | 2 +- scripts/_common.sh | 2 + scripts/backup | 4 +- scripts/install | 31 ++---- scripts/remove | 39 ++----- scripts/restore | 28 +++-- scripts/upgrade | 44 ++++---- scripts/ynh_apps | 110 ++++++++++++++++++++ 17 files changed, 338 insertions(+), 144 deletions(-) delete mode 100644 .gitignore create mode 100644 scripts/ynh_apps diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 783a4ae..0000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*~ -*.sw[op] diff --git a/README.md b/README.md index a962331..d82ef92 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in Jitsi Meet is a libre software (Apache) WebRTC JavaScript app that uses Jitsi Videobridge to provide high quality, secure, and scalable video conferences. -**Shipped version:** 1.0.5913~ynh3 +**Shipped version:** 1.0.6155~ynh1 **Demo:** https://meet.jit.si/ diff --git a/README_fr.md b/README_fr.md index b86db42..0a4ef89 100644 --- a/README_fr.md +++ b/README_fr.md @@ -14,7 +14,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour Jitsi Meet est un logiciel libre (Apache) dont Jitsi Videobridge, avec WebRTC Javascript, propose des vidéos-conférences de haute qualité, sécurisées et évolutives. -**Version incluse :** 1.0.5913~ynh3 +**Version incluse :** 1.0.6155~ynh1 **Démo :** https://meet.jit.si/ diff --git a/check_process b/check_process index fd98cd2..30f4242 100644 --- a/check_process +++ b/check_process @@ -15,6 +15,8 @@ upgrade=1 from_commit=ba635a58f8184b5dd4a6682b8da96909d3d31060 # 1.0.5913~ynh1 upgrade=1 from_commit=12d4758ea7582c9d15d0bd80e2eb5f03ccac8484 + # 1.0.5913~ynh3 + upgrade=1 from_commit=afbc84d313452267cd97b9df44801d0ae085b1f2 backup_restore=1 multi_instance=0 port_already_use=0 diff --git a/conf/jitsi-jicofo.src b/conf/jitsi-jicofo.src index 1fbfd1a..459c976 100644 --- a/conf/jitsi-jicofo.src +++ b/conf/jitsi-jicofo.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://download.jitsi.org/stable/jicofo_1.0-862-1_all.deb -SOURCE_SUM=410777ca731c3b12578dcccbdee3dc0789fec2d828de95502952d6cdf0343887 +SOURCE_URL=https://download.jitsi.org/stable/jicofo_1.0-877-1_all.deb +SOURCE_SUM=a761d32a01240a8e665bea454ac6c082a78d0d3aeb60db707f38035ea1363f35 SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=deb SOURCE_IN_SUBDIR=true diff --git a/conf/jitsi-meet-config.js b/conf/jitsi-meet-config.js index a2276f7..4bd9870 100644 --- a/conf/jitsi-meet-config.js +++ b/conf/jitsi-meet-config.js @@ -68,6 +68,11 @@ var config = { // or disabled for the screenshare. // capScreenshareBitrate: 1 // 0 to disable - deprecated. + // Whether to use fake constraints (height: 99999, width: 99999) when calling getDisplayMedia on + // Chromium based browsers. This is intended as a workaround for + // https://bugs.chromium.org/p/chromium/issues/detail?id=1056311 + // setScreenSharingResolutionConstraints: true + // Enable callstats only for a percentage of users. // This takes a value between 0 and 100 which determines the probability for // the callstats to be enabled. @@ -78,6 +83,10 @@ var config = { flags: { // Enables source names in the signaling. // sourceNameSignaling: false, + + // Enables sending multiple video streams, i.e., camera and desktop tracks can be shared in the conference + // separately as two different streams instead of one composite stream. + // sendMultipleVideoStreams: false }, // Disables moderator indicators. @@ -280,6 +289,9 @@ var config = { // Whether to enable live streaming or not. // liveStreamingEnabled: false, + // Whether to enable local recording or not. + // enableLocalRecording: false, + // Transcription (in interface_config, // subtitles and buttons can be configured) // transcribingEnabled: false, @@ -473,6 +485,10 @@ var config = { // If Lobby is enabled starts knocking automatically. // autoKnockLobby: false, + // Enable lobby chat. + // enableLobbyChat: true, + + // DEPRECATED! Use `breakoutRooms.hideAddRoomButton` instead. // Hides add breakout room button // hideAddRoomButton: false, @@ -511,7 +527,7 @@ var config = { // Hides the dominant speaker name badge that hovers above the toolbox // hideDominantSpeakerBadge: false, - // Default language for the user interface. + // Default language for the user interface. Cannot be overwritten. // defaultLanguage: 'en', // Disables profile and the edit of all fields from the profile settings (display name and email) @@ -540,6 +556,10 @@ var config = { // // When 'true', it shows an intermediate page before joining, where the user can configure their devices. // // This replaces `prejoinPageEnabled`. // enabled: true, + // // Hides the participant name editing field in the prejoin screen. + // // If requireDisplayName is also set as true, a name should still be provided through + // // either the jwt or the userInfo from the iframe api init object in order for this to have an effect. + // hideDisplayName: false, // // List of buttons to hide from the extra join options dropdown. // hideExtraJoinButtons: ['no-audio', 'by-phone'] // }, @@ -567,8 +587,17 @@ var config = { // Array with avatar URL prefixes that need to use CORS. // corsAvatarURLs: [ 'https://www.gravatar.com/avatar/' ], - // Base URL for a Gravatar-compatible service. Defaults to libravatar. - // gravatarBaseURL: 'https://seccdn.libravatar.org/avatar/', + // Base URL for a Gravatar-compatible service. Defaults to Gravatar. + // DEPRECATED! Use `gravatar.baseUrl` instead. + // gravatarBaseURL: 'https://www.gravatar.com/avatar/', + + // Setup for Gravatar-compatible services. + // gravatar: { + // // Defaults to Gravatar. + // baseUrl: 'https://www.gravatar.com/avatar/', + // // True if Gravatar should be disabled. + // disabled: false + // }, // App name to be displayed in the invitation email subject, as an alternative to // interfaceConfig.APP_NAME. @@ -590,6 +619,7 @@ var config = { // 'chat', // 'closedcaptions', // 'desktop', + // 'dock-iframe' // 'download', // 'embedmeeting', // 'etherpad', @@ -598,11 +628,11 @@ var config = { // 'fullscreen', // 'hangup', // 'help', + // 'highlight', // 'invite', + // 'linktosalesforce', // 'livestreaming', // 'microphone', - // 'mute-everyone', - // 'mute-video-everyone', // 'participants-pane', // 'profile', // 'raisehand', @@ -616,6 +646,7 @@ var config = { // 'stats', // 'tileview', // 'toggle-camera', + // 'undock-iframe', // 'videoquality', // '__end' // ], @@ -630,7 +661,9 @@ var config = { // timeout: 4000, // // Moved from interfaceConfig.TOOLBAR_ALWAYS_VISIBLE // // Whether toolbar should be always visible or should hide after x miliseconds. - // alwaysVisible: false + // alwaysVisible: false, + // // Indicates whether the toolbar should still autohide when chat is open + // autoHideWhileChatIsOpen: false // }, // Toolbar buttons which have their click/tap event exposed through the API on @@ -739,8 +772,25 @@ var config = { // Enables sending participants' emails (if available) to callstats and other analytics // enableEmailInStats: false, - // Enables detecting faces of participants and get their expression and send it to other participants - // enableFacialRecognition: true, + // faceLandmarks: { + // // Enables sharing your face coordinates. Used for centering faces within a video. + // enableFaceCentering: false, + + // // Enables detecting face expressions and sharing data with other participants + // enableFaceExpressionsDetection: false, + + // // Enables displaying face expressions in speaker stats + // enableDisplayFaceExpressions: false, + + // // Minimum required face movement percentage threshold for sending new face centering coordinates data. + // faceCenteringThreshold: 10, + + // // Milliseconds for processing a new image capture in order to detect face coordinates if they exist. + // captureInterval: 1000, + + // // Maximum number of faces that can be detected from a video track. + // maxFacesDetected: 4 + // }, // Controls the percentage of automatic feedback shown to participants when callstats is enabled. // The default value is 100%. If set to 0, no automatic feedback will be requested @@ -903,23 +953,6 @@ var config = { // ] // }, - // Local Recording - // - - // localRecording: { - // Enables local recording. - // Additionally, 'localrecording' (all lowercase) needs to be added to - // the `toolbarButtons`-array for the Local Recording button to show up - // on the toolbar. - // - // enabled: true, - // - - // The recording format, can be one of 'ogg', 'flac' or 'wav'. - // format: 'flac' - // - - // }, // e2ee: { // labels, // externallyManagedKey: false @@ -927,14 +960,18 @@ var config = { // Options related to end-to-end (participant to participant) ping. // e2eping: { - // // The interval in milliseconds at which pings will be sent. - // // Defaults to 10000, set to <= 0 to disable. - // pingInterval: 10000, + // // Whether ene-to-end pings should be enabled. + // enabled: false, // - // // The interval in milliseconds at which analytics events - // // with the measured RTT will be sent. Defaults to 60000, set - // // to <= 0 to disable. - // analyticsInterval: 60000, + // // The number of responses to wait for. + // numRequests: 5, + // + // // The max conference size in which e2e pings will be sent. + // maxConferenceSize: 200, + // + // // The maximum number of e2e ping messages per second for the whole conference to aim for. + // // This is used to contol the pacing of messages in order to reduce the load on the backend. + // maxMessagesPerSecond: 250 // }, // If set, will attempt to use the provided video input device label when @@ -961,7 +998,8 @@ var config = { // Disables all invite functions from the app (share, invite, dial out...etc) // disableInviteFunctions: true, - // Disables storing the room name to the recents list + // Disables storing the room name to the recents list. When in an iframe this is ignored and + // the room is never stored in the recents list. // doNotStoreRoom: true, // Deployment specific URLs. @@ -976,12 +1014,25 @@ var config = { // Options related to the remote participant menu. // remoteVideoMenu: { + // // Whether the remote video context menu to be rendered or not. + // disabled: true, // // If set to true the 'Kick out' button will be disabled. // disableKick: true, // // If set to true the 'Grant moderator' button will be disabled. - // disableGrantModerator: true + // disableGrantModerator: true, + // // If set to true the 'Send private message' button will be disabled. + // disablePrivateChat: true // }, + // Endpoint that enables support for salesforce integration with in-meeting resource linking + // This is required for: + // listing the most recent records - salesforceUrl/records/recents + // searching records - salesforceUrl/records?text=${text} + // retrieving record details - salesforceUrl/records/${id}?type=${type} + // and linking the meeting - salesforceUrl/sessions/${sessionId}/records/${id} + // + // salesforceUrl: 'https://api.example.com/', + // If set to true all muting operations of remote participants will be disabled. // disableRemoteMute: true, @@ -1045,6 +1096,26 @@ var config = { */ // dynamicBrandingUrl: '', + // Options related to the participants pane. + // participantsPane: { + // // Hides the moderator settings tab. + // hideModeratorSettingsTab: false, + // // Hides the more actions button. + // hideMoreActionsButton: false, + // // Hides the mute all button. + // hideMuteAllButton: false + // }, + + // Options related to the breakout rooms feature. + // breakoutRooms: { + // // Hides the add breakout room button. This replaces `hideAddRoomButton`. + // hideAddRoomButton: false, + // // Hides the auto assign participants button. + // hideAutoAssignButton: false, + // // Hides the join breakout room button. + // hideJoinRoomButton: false + // }, + // When true the user cannot add more images to be used as virtual background. // Only the default ones from will be available. // disableAddingBackgroundImages: false, @@ -1071,7 +1142,7 @@ var config = { // If a label's id is not in any of the 2 arrays, it will not be visible at all on the header. // conferenceInfo: { // // those labels will not be hidden in tandem with the toolbox. - // alwaysVisible: ['recording', 'local-recording', 'raised-hands-count'], + // alwaysVisible: ['recording', 'raised-hands-count'], // // those labels will be auto-hidden in tandem with the toolbox buttons. // autoHide: [ // 'subject', @@ -1080,7 +1151,8 @@ var config = { // 'e2ee', // 'transcribing', // 'video-quality', - // 'insecure-room' + // 'insecure-room', + // 'highlight-moment' // ] // }, @@ -1114,14 +1186,24 @@ var config = { // will open an etherpad document. // etherpad_base: 'https://your-etherpad-installati.on/p/', + // To enable information about dial-in access to meetings you need to provide + // dialInNumbersUrl and dialInConfCodeUrl. + // dialInNumbersUrl returns a json array of numbers that can be used for dial-in. + // {"countryCode":"US","tollFree":false,"formattedNumber":"+1 123-456-7890"} + // dialInConfCodeUrl is the conference mapper converting a meeting id to a PIN used for dial-in + // or the other way around (more info in resources/cloud-api.swagger) + // + // For JaaS customers the default values are: + // dialInNumbersUrl: 'https://conference-mapper.jitsi.net/v1/access/dids', + // dialInConfCodeUrl: 'https://conference-mapper.jitsi.net/v1/access', + // + // List of undocumented settings used in jitsi-meet /** _immediateReloadThreshold debug debugAudioLevels deploymentInfo - dialInConfCodeUrl - dialInNumbersUrl dialOutAuthUrl dialOutCodesUrl disableRemoteControl @@ -1164,6 +1246,7 @@ var config = { forceJVB121Ratio forceTurnRelay hiddenDomain + hiddenFromRecorderFeatureEnabled ignoreStartMuted websocketKeepAlive websocketKeepAliveUrl @@ -1205,7 +1288,6 @@ var config = { // 'liveStreaming.unavailableTitle', // shown when livestreaming service is not reachable // 'lobby.joinRejectedMessage', // shown when while in a lobby, user's request to join is rejected // 'lobby.notificationTitle', // shown when lobby is toggled and when join requests are allowed / denied - // 'localRecording.localRecording', // shown when a local recording is started // 'notify.chatMessages', // shown when receiving chat messages while the chat window is closed // 'notify.disconnected', // shown when a participant has left // 'notify.connectedOneMember', // show when a participant joined @@ -1219,6 +1301,7 @@ var config = { // 'notify.invitedThreePlusMembers', // shown when 3+ participants have been invited // 'notify.invitedTwoMembers', // shown when 2 participants have been invited // 'notify.kickParticipant', // shown when a participant is kicked + // 'notify.linkToSalesforce', // shown when joining a meeting with salesforce integration // 'notify.moderationStartedTitle', // shown when AV moderation is activated // 'notify.moderationStoppedTitle', // shown when AV moderation is deactivated // 'notify.moderationInEffectTitle', // shown when user attempts to unmute audio during AV moderation @@ -1228,11 +1311,13 @@ var config = { // 'notify.mutedTitle', // shown when user has been muted upon joining, // 'notify.newDeviceAudioTitle', // prompts the user to use a newly detected audio device // 'notify.newDeviceCameraTitle', // prompts the user to use a newly detected camera + // 'notify.participantWantsToJoin', // shown when lobby is enabled and participant requests to join meeting // 'notify.passwordRemovedRemotely', // shown when a password has been removed remotely // 'notify.passwordSetRemotely', // shown when a password has been set remotely // 'notify.raisedHand', // shown when a partcipant used raise hand, // 'notify.startSilentTitle', // shown when user joined with no audio // 'notify.unmute', // shown to moderator when user raises hand during AV moderation + // 'notify.hostAskedUnmute', // shown to participant when host asks them to unmute // 'prejoin.errorDialOut', // 'prejoin.errorDialOutDisconnected', // 'prejoin.errorDialOutFailed', @@ -1248,12 +1333,47 @@ var config = { // 'transcribing.failedToStart' // shown when transcribing fails to start // ], + // List of notifications to be disabled. Works in tandem with the above setting. + // disabledNotifications: [], + // Prevent the filmstrip from autohiding when screen width is under a certain threshold // disableFilmstripAutohiding: false, + // filmstrip: { + // // Disables user resizable filmstrip. Also, allows configuration of the filmstrip + // // (width, tiles aspect ratios) through the interfaceConfig options. + // disableResizable: false, + + // // Disables the stage filmstrip + // // (displaying multiple participants on stage besides the vertical filmstrip) + // disableStageFilmstrip: false + // }, + + // Tile view related config options. + // tileView: { + // // The optimal number of tiles that are going to be shown in tile view. Depending on the screen size it may + // // not be possible to show the exact number of participants specified here. + // numberOfVisibleTiles: 25 + // }, + // Specifies whether the chat emoticons are disabled or not // disableChatSmileys: false, + // Settings for the GIPHY integration. + // giphy: { + // // Whether the feature is enabled or not. + // enabled: false, + // // SDK API Key from Giphy. + // sdkKey: '', + // // Display mode can be one of: + // // - tile: show the GIF on the tile of the participant that sent it. + // // - chat: show the GIF as a message in chat + // // - all: all of the above. This is the default option + // displayMode: 'all', + // // How long the GIF should be displayed on the tile (in miliseconds). + // tileTime: 5000 + // }, + // Allow all above example options to include a trailing comma and // prevent fear when commenting out the last value. makeJsonParserHappy: 'even if last key had a trailing comma' diff --git a/conf/jitsi-meet-prosody.src b/conf/jitsi-meet-prosody.src index 8f01328..840c658 100644 --- a/conf/jitsi-meet-prosody.src +++ b/conf/jitsi-meet-prosody.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://download.jitsi.org/stable/jitsi-meet-prosody_1.0.5913-1_all.deb -SOURCE_SUM=6ed4f76bbe9dfe4d4e6508d48e8337c2867dce8ec3de50b3b03fc60bfae8aaa4 +SOURCE_URL=https://download.jitsi.org/stable/jitsi-meet-prosody_1.0.6155-1_all.deb +SOURCE_SUM=2503d45b9cb92d46c43c211ca3d9c3904fd9045062ac121237b0ed7695e5c727 SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=deb SOURCE_IN_SUBDIR=true diff --git a/conf/jitsi-meet-web.src b/conf/jitsi-meet-web.src index 1a006ed..7e7b8a2 100644 --- a/conf/jitsi-meet-web.src +++ b/conf/jitsi-meet-web.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://download.jitsi.org/stable/jitsi-meet-web_1.0.5913-1_all.deb -SOURCE_SUM=0d6b8ba2b56556b2816fd98f02401ff2a9a84ade594cc517827484c6fb994798 +SOURCE_URL=https://download.jitsi.org/stable/jitsi-meet-web_1.0.6155-1_all.deb +SOURCE_SUM=3ef7e8be35efc76db7bc4f577de136f48cae0900cf2646418909449d721fcace SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=deb SOURCE_IN_SUBDIR=true diff --git a/conf/jitsi-videobridge.src b/conf/jitsi-videobridge.src index 2eb57ff..b7a9152 100644 --- a/conf/jitsi-videobridge.src +++ b/conf/jitsi-videobridge.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://download.jitsi.org/stable/jitsi-videobridge2_2.1-634-gff8609ad-1_all.deb -SOURCE_SUM=ccfb5a023ba258b3f8bb5b816f62e269484ef09afe9f5de752b3156b0529c481 +SOURCE_URL=https://download.jitsi.org/stable/jitsi-videobridge2_2.1-681-g3544ed05-1_all.deb +SOURCE_SUM=f3a973b7d4a767a969a3bcfa3d0bd531945d349d3378350ff76c2b6e747415b1 SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=deb SOURCE_IN_SUBDIR=true diff --git a/manifest.json b/manifest.json index 5103063..83e4622 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Video conferencing web application", "fr": "Application web de conférence vidéo" }, - "version": "1.0.5913~ynh3", + "version": "1.0.6155~ynh1", "url": "https://jitsi.org/Projects/JitMeet", "upstream": { "license": "Apache-2.0", diff --git a/scripts/_common.sh b/scripts/_common.sh index 992eb27..b71ccbf 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -7,6 +7,8 @@ # dependencies used by the app pkg_dependencies="openjdk-8-jre-headless|openjdk-11-jre-headless debconf|debconf-2.0 procps uuid-runtime lua-ldap" +ynh_app_dependencies="prosody" + if [ $YNH_ARCH == "armhf" ] then pkg_dependencies_arm="automake autoconf build-essential libtool git maven m4" diff --git a/scripts/backup b/scripts/backup index 9add3f2..ca1534e 100644 --- a/scripts/backup +++ b/scripts/backup @@ -6,7 +6,7 @@ # IMPORT GENERIC HELPERS #================================================= -#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts +# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers @@ -15,7 +15,7 @@ source /usr/share/yunohost/helpers #================================================= ynh_clean_setup () { - ynh_clean_check_starting + true } # Exit if an error occurs during the execution of the script ynh_abort_if_errors diff --git a/scripts/install b/scripts/install index 80e81fe..5436fea 100644 --- a/scripts/install +++ b/scripts/install @@ -7,6 +7,7 @@ #================================================= source _common.sh +source ynh_apps source /usr/share/yunohost/helpers #================================================= @@ -98,25 +99,15 @@ ynh_app_setting_set --app=$app --key=port_component --value=$port_component #================================================= ynh_script_progression --message="Installing dependencies..." +ynh_install_apps --apps="$ynh_app_dependencies" ynh_install_app_dependencies $pkg_dependencies + if [ $YNH_ARCH == "armhf" ] then ynh_script_progression --message="Installing specific arm dependencies..." ynh_install_extra_app_dependencies --repo="deb http://security.debian.org/debian-security stretch/updates main" --package="$pkg_extra_depedencies_arm" --key="https://ftp-master.debian.org/keys/archive-key-9-security.asc" fi - -if ! yunohost app list | grep -q "prosody" -then - yunohost tools update - yunohost app install prosody -else - yunohost tools update - yunohost app upgrade prosody -fi - -ynh_app_setting_set --app=$app --key=require_prosody --value="1" - #================================================= # CREATE DEDICATED USER #================================================= @@ -263,6 +254,14 @@ mkdir -p "/var/log/$app" chown -R $app: /var/log/$app chmod -R 770 /var/log/$app +#================================================= +# SECURE FILES AND DIRECTORIES +#================================================= +ynh_script_progression --message="Securing files and directories..." + +# Set permissions to app files +chown -R $app: /etc/$app + #================================================= # SETUP SYSTEMD #================================================= @@ -274,14 +273,6 @@ ynh_add_systemd_config --service=$app-jicofo --template="jitsi-jicofo.service" #================================================= # GENERIC FINALIZATION -#================================================= -# SECURE FILES AND DIRECTORIES -#================================================= -ynh_script_progression --message="Securing files and directories..." - -# Set permissions to app files -chown -R $app: /etc/$app - #================================================= # SETUP LOGROTATE #================================================= diff --git a/scripts/remove b/scripts/remove index 5d6b44e..1385a61 100644 --- a/scripts/remove +++ b/scripts/remove @@ -7,6 +7,7 @@ #================================================= source _common.sh +source ynh_apps source /usr/share/yunohost/helpers #================================================= @@ -52,6 +53,14 @@ ynh_script_progression --message="Stopping and removing the systemd service..." ynh_remove_systemd_config --service=$app-videobridge ynh_remove_systemd_config --service=$app-jicofo +#================================================= +# REMOVE LOGROTATE CONFIGURATION +#================================================= +ynh_script_progression --message="Removing logrotate configuration..." + +# Remove the app-specific logrotate config +ynh_remove_logrotate + #================================================= # RECONFIGURE PROSODY #================================================= @@ -79,14 +88,6 @@ update-ca-certificates -f ynh_systemd_action --service_name=prosody --action=restart -#================================================= -# REMOVE LOGROTATE CONFIGURATION -#================================================= -ynh_script_progression --message="Removing logrotate configuration..." - -# Remove the app-specific logrotate config -ynh_remove_logrotate - #================================================= # REMOVE APP MAIN DIR #================================================= @@ -115,27 +116,7 @@ ynh_remove_app_dependencies ynh_app_setting_delete --app=$app --key=require_prosody gpasswd --delete prosody $app -# List apps requiring Prosody -installed_apps=$(yunohost app list | grep -oP 'id: \K.*$') -required_by="" -installed_app_required_by="" -for installed_app in $installed_apps -do - installed_app_required_by=$(ynh_app_setting_get --app=$installed_app --key="require_prosody") - if [[ $installed_app_required_by ]] - then - required_by="${installed_app_required_by}" - fi - installed_app_required_by="" -done - -# If Prosody is no more required -if [[ ! $required_by ]] -then - # Remove Prosody - ynh_print_info --message="Removing of Prosody" - yunohost app remove prosody --purge -fi +ynh_remove_apps #================================================= # CLOSE A PORT diff --git a/scripts/restore b/scripts/restore index 702caea..264c514 100644 --- a/scripts/restore +++ b/scripts/restore @@ -6,8 +6,9 @@ # IMPORT GENERIC HELPERS #================================================= -#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts +# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts source ../settings/scripts/_common.sh +source ../settings/scripts/ynh_apps source /usr/share/yunohost/helpers #================================================= @@ -52,13 +53,6 @@ test ! -d $final_path \ #================================================= # STANDARD RESTORATION STEPS -#================================================= -# RESTORE THE NGINX CONFIGURATION -#================================================= -ynh_script_progression --message="Restoring the NGINX web server configuration..." - -ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" - #================================================= # RECREATE THE DEDICATED USER #================================================= @@ -87,20 +81,24 @@ chown -R $app:$app "$final_path" ynh_script_progression --message="Reinstalling dependencies..." # Define and install dependencies +ynh_install_apps --apps="$ynh_app_dependencies" ynh_install_app_dependencies $pkg_dependencies -if ! yunohost app list | grep -q "prosody" +if [ $YNH_ARCH == "armhf" ] then - yunohost tools update - yunohost app install prosody -else - yunohost tools update - yunohost app upgrade prosody + ynh_script_progression --message="Installing specific arm dependencies..." + ynh_install_extra_app_dependencies --repo="deb http://security.debian.org/debian-security stretch/updates main" --package="$pkg_extra_depedencies_arm" --key="https://ftp-master.debian.org/keys/archive-key-9-security.asc" fi -ynh_app_setting_set --app=$app --key=require_prosody --value="1" gpasswd --add prosody $app +#================================================= +# RESTORE THE NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring the NGINX web server configuration..." + +ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" + #================================================= # CONFIGURE FIREWALL #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index 1480702..93c02cb 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -7,6 +7,7 @@ #================================================= source _common.sh +source ynh_apps source /usr/share/yunohost/helpers #================================================= @@ -130,19 +131,12 @@ chmod 750 "$final_path" chmod -R o-rwx "$final_path" chown -R $app:$app "$final_path" -#================================================= -# NGINX CONFIGURATION -#================================================= -ynh_script_progression --message="Upgrading NGINX web server configuration..." - -# Create a dedicated NGINX config -ynh_add_nginx_config - #================================================= # UPGRADE DEPENDENCIES #================================================= ynh_script_progression --message="Upgrading dependencies..." +ynh_install_apps --apps="$ynh_app_dependencies" ynh_install_app_dependencies $pkg_dependencies if [ $YNH_ARCH == "armhf" ] @@ -151,18 +145,16 @@ then ynh_install_extra_app_dependencies --repo="deb http://security.debian.org/debian-security stretch/updates main" --package="$pkg_extra_depedencies_arm" --key="https://ftp-master.debian.org/keys/archive-key-9-security.asc" fi -if ! yunohost app list | grep -q "prosody" -then - yunohost tools update - yunohost app install prosody -else - yunohost tools update - yunohost app upgrade prosody -fi - -ynh_app_setting_set --app=$app --key=require_prosody --value="1" gpasswd --add prosody $app +#================================================= +# NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Upgrading NGINX web server configuration..." + +# Create a dedicated NGINX config +ynh_add_nginx_config + #================================================= # SPECIFIC UPGRADE #================================================= @@ -252,6 +244,14 @@ mkdir -p "/var/log/$app" chown -R $app: /var/log/$app chmod -R 770 /var/log/$app +#================================================= +# SECURE FILES AND DIRECTORIES +#================================================= +ynh_script_progression --message="Securing files and directories..." + +# Set permissions on app files +chown -R $app: /etc/$app + #================================================= # SETUP SYSTEMD #================================================= @@ -263,14 +263,6 @@ ynh_add_systemd_config --service=$app-jicofo --template="jitsi-jicofo.service" #================================================= # GENERIC FINALIZATION -#================================================= -# SECURE FILES AND DIRECTORIES -#================================================= -ynh_script_progression --message="Securing files and directories..." - -# Set permissions on app files -chown -R $app: /etc/$app - #================================================= # SETUP LOGROTATE #================================================= diff --git a/scripts/ynh_apps b/scripts/ynh_apps new file mode 100644 index 0000000..0faad86 --- /dev/null +++ b/scripts/ynh_apps @@ -0,0 +1,110 @@ +#!/bin/bash + +# Install others YunoHost apps +# +# usage: ynh_install_apps --apps="appfoo?domain=domain.foo&path=/foo appbar?domain=domain.bar&path=/bar&admin=USER&language=fr&is_public=1&pass?word=pass&port=666" +# | arg: -a, --apps= - apps to install +# +# Requires YunoHost version *.*.* or higher. +ynh_install_apps() { + # Declare an array to define the options of this helper. + local legacy_args=a + local -A args_array=([a]=apps=) + local apps + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + + # Split the list of apps in an array + local apps_list=($(echo $apps | tr " " "\n")) + local apps_dependencies="" + + # For each app + for one_app_and_its_args in "${apps_list[@]}" + do + # Retrieve the name of the app (part before ?) + local one_app=$(cut -d "?" -f1 <<< "$one_app_and_its_args") + [ -z "$one_app" ] && ynh_die --message="You didn't provided a YunoHost app to install" + + yunohost tools update apps + + # Installing or upgrading the app depending if it's installed or not + if ! yunohost app list --output-as json --quiet | jq -e --arg id $one_app '.apps[] | select(.id == $id)' >/dev/null + then + # Retrieve the arguments of the app (part after ?) + local one_argument=$(cut -d "?" -f2- <<< "$one_app_and_its_args") + [ ! -z "$one_argument" ] && one_argument="--args $one_argument" + + # Install the app with its arguments + yunohost app install $one_app $one_argument + else + # Upgrade the app + yunohost app upgrade $one_app + fi + + if [ ! -z "$apps_dependencies" ] + then + apps_dependencies="$apps_dependencies, $one_app" + else + apps_dependencies="$one_app" + fi + done + + ynh_app_setting_set --app=$app --key=apps_dependencies --value="$apps_dependencies" +} + +# Remove other YunoHost apps +# +# Other YunoHost apps will be removed only if no other apps need them. +# +# usage: ynh_remove_apps +# +# Requires YunoHost version *.*.* or higher. +ynh_remove_apps() { + # Retrieve the apps dependencies of the app + local apps_dependencies=$(ynh_app_setting_get --app=$app --key=apps_dependencies) + ynh_app_setting_delete --app=$app --key=apps_dependencies + + if [ ! -z "$apps_dependencies" ] + then + # Split the list of apps dependencies in an array + local apps_dependencies_list=($(echo $apps_dependencies | tr ", " "\n")) + + # For each apps dependencies + for one_app in "${apps_dependencies_list[@]}" + do + # Retrieve the list of installed apps + local installed_apps_list=$(yunohost app list --output-as json --quiet | jq -r .apps[].id) + local required_by="" + local installed_app_required_by="" + + # For each other installed app + for one_installed_app in $installed_apps_list + do + # Retrieve the other apps dependencies + one_installed_apps_dependencies=$(ynh_app_setting_get --app=$one_installed_app --key=apps_dependencies) + if [ ! -z "$one_installed_apps_dependencies" ] + then + one_installed_apps_dependencies_list=($(echo $one_installed_apps_dependencies | tr ", " "\n")) + + # For each dependency of the other apps + for one_installed_app_dependency in "${one_installed_apps_dependencies_list[@]}" + do + if [[ $one_installed_app_dependency == $one_app ]]; then + required_by="$required_by $one_installed_app" + fi + done + fi + done + + # If $one_app is no more required + if [[ -z "$required_by" ]] + then + # Remove $one_app + ynh_print_info --message="Removing of $one_app" + yunohost app remove $one_app --purge + else + ynh_print_info --message="$one_app was not removed because it's still required by${required_by}" + fi + done + fi +} From e65df472fb8862db4e6a1c5c79f4bd49acb1865c Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Wed, 8 Jun 2022 23:19:58 +0000 Subject: [PATCH 2/2] Auto-update README --- README.md | 19 ++++++++++--------- README_fr.md | 25 +++++++++++++++---------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index d82ef92..0cf32d2 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ It shall NOT be edited by hand. # Jitsi Meet for YunoHost -[![Integration level](https://dash.yunohost.org/integration/jitsi.svg)](https://dash.yunohost.org/appci/app/jitsi) ![](https://ci-apps.yunohost.org/ci/badges/jitsi.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/jitsi.maintain.svg) +[![Integration level](https://dash.yunohost.org/integration/jitsi.svg)](https://dash.yunohost.org/appci/app/jitsi) ![Working status](https://ci-apps.yunohost.org/ci/badges/jitsi.status.svg) ![Maintenance status](https://ci-apps.yunohost.org/ci/badges/jitsi.maintain.svg) [![Install Jitsi Meet with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=jitsi) *[Lire ce readme en français.](./README_fr.md)* @@ -24,7 +24,7 @@ Jitsi Meet is a libre software (Apache) WebRTC JavaScript app that uses Jitsi Vi ## Screenshots -![](./doc/screenshots/screenshot.png) +![Screenshot of Jitsi Meet](./doc/screenshots/screenshot.png) ## Disclaimers / important information @@ -38,21 +38,22 @@ Jitsi Meet is a libre software (Apache) WebRTC JavaScript app that uses Jitsi Vi ## Documentation and resources -* Official app website: https://jitsi.org/ -* Official user documentation: https://jitsi.org/user-faq/ -* Upstream app code repository: https://github.com/jitsi/jitsi-meet -* YunoHost documentation for this app: https://yunohost.org/app_jitsi -* Report a bug: https://github.com/YunoHost-Apps/jitsi_ynh/issues +* Official app website: +* Official user documentation: +* Upstream app code repository: +* YunoHost documentation for this app: +* Report a bug: ## Developer info Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/jitsi_ynh/tree/testing). To try the testing branch, please proceed like that. -``` + +``` bash sudo yunohost app install https://github.com/YunoHost-Apps/jitsi_ynh/tree/testing --debug or sudo yunohost app upgrade jitsi -u https://github.com/YunoHost-Apps/jitsi_ynh/tree/testing --debug ``` -**More info regarding app packaging:** https://yunohost.org/packaging_apps \ No newline at end of file +**More info regarding app packaging:** diff --git a/README_fr.md b/README_fr.md index 0a4ef89..8e0ff17 100644 --- a/README_fr.md +++ b/README_fr.md @@ -1,10 +1,14 @@ + + # Jitsi Meet pour YunoHost -[![Niveau d'intégration](https://dash.yunohost.org/integration/jitsi.svg)](https://dash.yunohost.org/appci/app/jitsi) ![](https://ci-apps.yunohost.org/ci/badges/jitsi.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/jitsi.maintain.svg) +[![Niveau d'intégration](https://dash.yunohost.org/integration/jitsi.svg)](https://dash.yunohost.org/appci/app/jitsi) ![Statut du fonctionnement](https://ci-apps.yunohost.org/ci/badges/jitsi.status.svg) ![Statut de maintenance](https://ci-apps.yunohost.org/ci/badges/jitsi.maintain.svg) [![Installer Jitsi Meet avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=jitsi) *[Read this readme in english.](./README.md)* -*[Lire ce readme en français.](./README_fr.md)* > *Ce package vous permet d'installer Jitsi Meet rapidement et simplement sur un serveur YunoHost. Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l'installer et en profiter.* @@ -20,7 +24,7 @@ Jitsi Meet est un logiciel libre (Apache) dont Jitsi Videobridge, avec WebRTC Ja ## Captures d'écran -![](./doc/screenshots/screenshot.png) +![Capture d'écran de Jitsi Meet](./doc/screenshots/screenshot.png) ## Avertissements / informations importantes @@ -34,21 +38,22 @@ Jitsi Meet est un logiciel libre (Apache) dont Jitsi Videobridge, avec WebRTC Ja ## Documentations et ressources -* Site officiel de l'app : https://jitsi.org/ -* Documentation officielle utilisateur : https://jitsi.org/user-faq/ -* Dépôt de code officiel de l'app : https://github.com/jitsi/jitsi-meet -* Documentation YunoHost pour cette app : https://yunohost.org/app_jitsi -* Signaler un bug : https://github.com/YunoHost-Apps/jitsi_ynh/issues +* Site officiel de l'app : +* Documentation officielle utilisateur : +* Dépôt de code officiel de l'app : +* Documentation YunoHost pour cette app : +* Signaler un bug : ## Informations pour les développeurs Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/jitsi_ynh/tree/testing). Pour essayer la branche testing, procédez comme suit. -``` + +``` bash sudo yunohost app install https://github.com/YunoHost-Apps/jitsi_ynh/tree/testing --debug ou sudo yunohost app upgrade jitsi -u https://github.com/YunoHost-Apps/jitsi_ynh/tree/testing --debug ``` -**Plus d'infos sur le packaging d'applications :** https://yunohost.org/packaging_apps \ No newline at end of file +**Plus d'infos sur le packaging d'applications :**