<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://en.wiki.ryzom.com/wiki/Portal:Forge?from=/w/index.php?action=history&amp;feed=atom&amp;title=EN_patch</id>
		<title>EN patch - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://en.wiki.ryzom.com/wiki/Portal:Forge?from=/w/index.php?action=history&amp;feed=atom&amp;title=EN_patch"/>
		<link rel="alternate" type="text/html" href="https://en.wiki.ryzom.com/wiki/Portal:Forge?from=/w/index.php?title=EN_patch&amp;action=history"/>
		<updated>2026-05-02T01:37:04Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.29.1</generator>

	<entry>
		<id>https://en.wiki.ryzom.com/wiki/Portal:Forge?from=/w/index.php?title=EN_patch&amp;diff=4837&amp;oldid=prev</id>
		<title>Zorroargh at 18:41, 4 June 2018</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.ryzom.com/wiki/Portal:Forge?from=/w/index.php?title=EN_patch&amp;diff=4837&amp;oldid=prev"/>
				<updated>2018-06-04T18:41:44Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 18:41, 4 June 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{tabLang|EN|DE patch|EN_patch|ES patch|FR patch|RU patch}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;{{migrated to|:en:patch}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{tabLang|EN|DE patch|EN_patch|ES patch|FR patch|RU patch}}&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;patch&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{toTrad|DE}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{toTrad|DE}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Zorroargh</name></author>	</entry>

	<entry>
		<id>https://en.wiki.ryzom.com/wiki/Portal:Forge?from=/w/index.php?title=EN_patch&amp;diff=4421&amp;oldid=prev</id>
		<title>Deed: Created page with &quot;{{tabLang|EN|DE patch|EN_patch|ES patch|FR patch|RU patch}}  {{toTrad|DE}} {{toTrad|EN|To check the quality of the text itself}} {{toTrad|ES}} {{toTrad|RU}}  {{TPInWikiRyzom}}...&quot;</title>
		<link rel="alternate" type="text/html" href="https://en.wiki.ryzom.com/wiki/Portal:Forge?from=/w/index.php?title=EN_patch&amp;diff=4421&amp;oldid=prev"/>
				<updated>2016-11-11T20:25:01Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{tabLang|EN|DE patch|EN_patch|ES patch|FR patch|RU patch}}  {{toTrad|DE}} {{toTrad|EN|To check the quality of the text itself}} {{toTrad|ES}} {{toTrad|RU}}  {{TPInWikiRyzom}}...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{tabLang|EN|DE patch|EN_patch|ES patch|FR patch|RU patch}}&lt;br /&gt;
&lt;br /&gt;
{{toTrad|DE}}&lt;br /&gt;
{{toTrad|EN|To check the quality of the text itself}}&lt;br /&gt;
{{toTrad|ES}}&lt;br /&gt;
{{toTrad|RU}}&lt;br /&gt;
&lt;br /&gt;
{{TPInWikiRyzom}}&lt;br /&gt;
[[Category:EN]]&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
&lt;br /&gt;
=  Patch creation  =&lt;br /&gt;
==  Installation packages  ==&lt;br /&gt;
===External Tools :===&lt;br /&gt;
# lzma&lt;br /&gt;
# xdelta&lt;br /&gt;
&lt;br /&gt;
  sudo aptitude install lzma xdelta&lt;br /&gt;
&lt;br /&gt;
===Tools Nel===&lt;br /&gt;
#make_bnp&lt;br /&gt;
#patch_gen&lt;br /&gt;
&lt;br /&gt;
They were created with the compilation of the shard.&lt;br /&gt;
For make_bnp :&lt;br /&gt;
[[en_make_bnp|Compilation of the .bnp]].&lt;br /&gt;
&lt;br /&gt;
===  Implementation of the data hierarchy ===&lt;br /&gt;
It must first be placed in a place in which we generate patches. One of these areas will be opened by the Apache server to serve the web clients.&lt;br /&gt;
We will place us in the '' patch_service '' in our directory '' home '':&lt;br /&gt;
&lt;br /&gt;
   mkdir ~/patch_service&lt;br /&gt;
   cd ~/patch_service&lt;br /&gt;
&lt;br /&gt;
Generate New Product :&lt;br /&gt;
   ~/patch_service$ patch_gen createNewProduct patch_game/ryzom.xml&lt;br /&gt;
 &lt;br /&gt;
Directory Layout:&lt;br /&gt;
* patch_service/&lt;br /&gt;
** bnp/&lt;br /&gt;
** patch/&lt;br /&gt;
** ref/&lt;br /&gt;
** ryzom.xml&lt;br /&gt;
&lt;br /&gt;
We will then copy our bnp files in the directory assigned to them (which we assume they are stored in a directory '' ~ / bnp '':&lt;br /&gt;
&lt;br /&gt;
  ~/patch_service$ cp ~/bnp/*.bnp patch_game/bnp/&lt;br /&gt;
&lt;br /&gt;
You must then create an empty file, which will be used for indexing patches. It consists of the name of the shard (we will Lirria as an example here, as this is the name of the shard development kaganate) followed .version, and will be placed in the '' patch_game '':&lt;br /&gt;
&lt;br /&gt;
  ~/patch_service$ touch patch_game/Example.version&lt;br /&gt;
&lt;br /&gt;
==  Configuring the patch server ==&lt;br /&gt;
&lt;br /&gt;
You must then edit the file ''patch_service/ryzom.xml'' :&lt;br /&gt;
&lt;br /&gt;
  ~/patch_service$ nano patch_game/ryzom.xml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the syntax of this file is given in another article ([[en cour | The syntax of the xml file of the patch server]]), and we will simply create here the establishment of the single '' patch_example.bnp '', planned to copy in the client subdirectory '/ user' data for testing.&lt;br /&gt;
&lt;br /&gt;
Our configuration file will look like this:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;xml&amp;gt;&lt;br /&gt;
      &amp;lt;_Categories&amp;gt;&lt;br /&gt;
  		&amp;lt;_Category&amp;gt;&lt;br /&gt;
  			&amp;lt;_Name type=&amp;quot;STRING&amp;quot; value=&amp;quot;khanat_lirria&amp;quot;/&amp;gt;&lt;br /&gt;
  			&amp;lt;_IsOptional type=&amp;quot;SINT32&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
  			&amp;lt;_UnpackTo type=&amp;quot;STRING&amp;quot; value=&amp;quot;./user/&amp;quot;/&amp;gt;&lt;br /&gt;
  			&amp;lt;_IsIncremental type=&amp;quot;SINT32&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
  			&amp;lt;_Files type=&amp;quot;STRING&amp;quot; value=&amp;quot;patch_example.bnp&amp;quot;/&amp;gt;&lt;br /&gt;
  		&amp;lt;/_Category&amp;gt;&lt;br /&gt;
  	&amp;lt;/_Categories&amp;gt;&lt;br /&gt;
  	&amp;lt;_IndexFileName type=&amp;quot;STRING&amp;quot; value=&amp;quot;ryzom.hist&amp;quot;/&amp;gt;&lt;br /&gt;
  	&amp;lt;_PatchDirectory type=&amp;quot;STRING&amp;quot; value=&amp;quot;patch_game/patch/&amp;quot;/&amp;gt;&lt;br /&gt;
  	&amp;lt;_BnpDirectory type=&amp;quot;STRING&amp;quot; value=&amp;quot;patch_game/bnp/&amp;quot;/&amp;gt;&lt;br /&gt;
  	&amp;lt;_RefDirectory type=&amp;quot;STRING&amp;quot; value=&amp;quot;patch_game/ref/&amp;quot;/&amp;gt;&lt;br /&gt;
  	&amp;lt;_NextVersionFile type=&amp;quot;STRING&amp;quot; value=&amp;quot;patch_game/Example.version&amp;quot;/&amp;gt;&lt;br /&gt;
  	&amp;lt;_ClientIndexFileName type=&amp;quot;STRING&amp;quot; value=&amp;quot;ryzom&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;/xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The specified parameters will gradually increment the content of our .bnp, adding new files, and the file bnp after being downloaded by the client, will be unpacked in '' / user '' to be taken account last (to overwrite older versions of files such as handy for testing).&lt;br /&gt;
&lt;br /&gt;
==  Patch server activation at the database ==&lt;br /&gt;
&lt;br /&gt;
The system based on a database, you must let him know that we activate the patch server. For this we will use commands in MySQL.&lt;br /&gt;
&lt;br /&gt;
We assume that your domain number is 12, if not, change the value.&lt;br /&gt;
First activate the patch server (by setting the value of '' patch_version '' to 1 instead of 0, default)&lt;br /&gt;
&lt;br /&gt;
  USE nel;&lt;br /&gt;
  UPDATE domain SET patch_version=1 WHERE domain_id=12;&lt;br /&gt;
&lt;br /&gt;
Then specify the server address in the fields '' patch_urls '':&lt;br /&gt;
&lt;br /&gt;
  USE nel;&lt;br /&gt;
  UPDATE domain SET patch_urls='http:''my.ip.com/patch' WHERE domain_id=12;&lt;br /&gt;
&lt;br /&gt;
== Creation of the first Patch  ==&lt;br /&gt;
&lt;br /&gt;
We must now create the first patch, which will provide the bnp in its original state at client.Nous reuse the same command, but with a different statement this time:&lt;br /&gt;
&lt;br /&gt;
  ~/patch_service$ patch_gen updateProduct patch_game/ryzom.xml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is possible that you have a warning during this operation, but this seems not serious.&lt;br /&gt;
&lt;br /&gt;
  WRN a8ded740 patch_gen_common.cpp 59 GeneratePatch &amp;lt;Unknown&amp;gt; : 'xdelta delta patch_game/empty patch_game/bnp/patch_example.bnp patch_game/patch/00001/patch_v1_00001.patch' failed with error code 256&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The key is to get to the end: ''Generating client index: patch_game/patch/00001/ryzom.idx...''&lt;br /&gt;
&lt;br /&gt;
==  Création de la Release Note  ==&lt;br /&gt;
You can create a file in the root '' patch '' that will serve to disseminate information on the patched data. This may be a php file, which can receive from the customer more information:&lt;br /&gt;
* version : the version of the patch ;&lt;br /&gt;
* lang : the customer's language ;&lt;br /&gt;
* ca : the connection Shard ;&lt;br /&gt;
* startPage : &amp;lt;wrap tip&amp;gt;to define&amp;lt;/wrap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Suppose we create a simple html file.&lt;br /&gt;
&lt;br /&gt;
  ~/patch_service$ nano patch_game/patch/index.php&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&lt;br /&gt;
  &amp;lt;meta http-equiv=&amp;quot;content-type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;h1&amp;gt;Saturday, october 28 2016&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;h2&amp;gt;RELEASE&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p&amp;gt;After much work and a few years we are proud to present the first official release .&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The content is now ready for release, remains to know the customers.&lt;br /&gt;
&lt;br /&gt;
=  Apache server configuration  =&lt;br /&gt;
&lt;br /&gt;
We are assuming that you already have a working Apache server, and that it is just to create a new VirtualHost. If the directory '' home '' of the user who manages the server is named '' gameserver '', it must have these parameters (otherwise adjust according to your settings):&lt;br /&gt;
&lt;br /&gt;
Our wish is to have a single address, without port to the patch server, which will be of the form '' http:my.ip.com/patch '' .&lt;br /&gt;
&lt;br /&gt;
So we must first install some modules for Apache (if not already done in advance):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  ~/patch_service$ sudo a2enmod proxy&lt;br /&gt;
  ~/patch_service$ sudo a2enmod proxy_http&lt;br /&gt;
&lt;br /&gt;
We then add in the VirtualHost listening on port 80 the line:&lt;br /&gt;
&lt;br /&gt;
  ProxyPass       /patch/ http:''lirria.khaganat.net:43435/&lt;br /&gt;
&lt;br /&gt;
Then we define our dedicated and Virtual Host:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost *:43435&amp;gt;&lt;br /&gt;
  ServerName lirria.khaganat.net&lt;br /&gt;
  DocumentRoot /home/gameserver/patch_service/patch_game/patch/&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;Directory &amp;quot;/home/gameserver/patch_service/patch_game/patch&amp;quot;&amp;gt;&lt;br /&gt;
     Options -Indexes &lt;br /&gt;
     AllowOverride All&lt;br /&gt;
     Require all granted&lt;br /&gt;
  &amp;lt;/Directory&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Option '' -Indexes '' blocks the display of default directories for security reasons.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open the 43435 port in Apache.&lt;br /&gt;
&lt;br /&gt;
  Listen 43435&lt;br /&gt;
&lt;br /&gt;
Once this is done, we restart the Apache service:&lt;br /&gt;
&lt;br /&gt;
  ~/patch_service$ sudo service apache2 restart&lt;br /&gt;
&lt;br /&gt;
=  Announce the availability of the patch  =&lt;br /&gt;
It must then warn customers that this patch number 1 is ready to be distributed, we will do with a new file '' Exemple.version '' (there will be two to one previously created) in directory '' patch '' served by Apache:&lt;br /&gt;
&lt;br /&gt;
  ~/patch_service$ nano patch_game/patch/Lirria.version&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is enough to indicate just (1 -  space 1 ):&lt;br /&gt;
&lt;br /&gt;
  1 1&lt;br /&gt;
&lt;br /&gt;
to say that the patch number 1 is ready. In the future, it will be enough to put 2 to serve the patch 2 etc.&lt;br /&gt;
&lt;br /&gt;
The second number is the one that is passed to the php page for '' version '', we change simultaneously so.&lt;br /&gt;
&lt;br /&gt;
= Client Configuration =&lt;br /&gt;
For the client to access the patches, there are two cases.&lt;br /&gt;
==  Client DEV  ==&lt;br /&gt;
It is better to indicate the parameters in its client_default.cfg. should therefore be taken to the presence of these lines:&lt;br /&gt;
&lt;br /&gt;
  PatchWanted          = 1;&lt;br /&gt;
  PatchUrl = &amp;quot;http:''my.ip.com/patch&amp;quot;;&lt;br /&gt;
  RingReleaseNotePath = &amp;quot;http:''my.ip.com/patch/index.php&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
It is now well '' PatchUrl '' and not '' PatchServer '', which is obsolete.&lt;br /&gt;
&lt;br /&gt;
The last refers to the file we created for&lt;br /&gt;
[[#creation_de_la_release_note|Release Notes.]]&lt;br /&gt;
&lt;br /&gt;
==  Client FV  ==&lt;br /&gt;
The FV client must be compiled with the '' WITH_RYZOM_PATCH '' to access the patch server. Without any other option specified, it will automatically connect to the patch server specified by the server (noted above in the MySQL database).&lt;br /&gt;
&lt;br /&gt;
It will seek the release notes on these hardcodées Address:&lt;br /&gt;
&lt;br /&gt;
  RingReleaseNotePath = &amp;quot;http:''&amp;quot; + WebIgMainDomain + &amp;quot;/releasenotes_ring/index.php&amp;quot;;&lt;br /&gt;
  ReleaseNotePath = &amp;quot;http:''&amp;quot; + WebIgMainDomain + &amp;quot;/releasenotes/index.php&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
This will require careful to ensure that the address '' WebIgMainDomain '' is correctly filled in client_defaut.cfg&lt;br /&gt;
&lt;br /&gt;
IF the customer FV also received the '' WITH_RYZOM_CUSTOM_PATCH_SERVER '', it will act as the client DEV and will be provided with the necessary lines in his client_default.cfg:&lt;br /&gt;
&lt;br /&gt;
  PatchWanted          = 1;&lt;br /&gt;
  PatchUrl = &amp;quot;http:''my.ip.com/patch&amp;quot;;&lt;br /&gt;
  RingReleaseNotePath = &amp;quot;http:''my.ip.com/patch/index.php&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
=  Enjoy !  =&lt;br /&gt;
With this configuration, be sure that your '' unpack '' is empty of any file '' .version '' or '' .idx '' for the first patch. Thereafter, the system will keep track of patches received in this directory, so be sure to keep these files (under penalty of having to re-patch your client 0). With our example, new elements will be automatically unpacked in your '' user '' at the client restart after downloading.&lt;br /&gt;
&lt;br /&gt;
It'll just launch your game client and see if patch!&lt;/div&gt;</summary>
		<author><name>Deed</name></author>	</entry>

	</feed>