Recent content https://ledgersmb.org/index.php/ en 1.9 release notes https://ledgersmb.org/index.php/content/19-release-notes <span class="field field--name-title field--type-string field--label-hidden">1.9 release notes</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><h1>What's new and notable in LedgerSMB 1.9</h1> <ul> <li>Customer/Vendor drop-down on invoices searchable</li> <li>E-mailed documents stored in the database</li> <li>Searching open invoices for payment by customer/vendor name</li> <li>A new command line application for administrative tasks and automation</li> <li>"GIFI" selections are now hidden when no GIFI is configured</li> <li>Replace "Ignore Year-ends" with opening or closing balances on balance sheet report</li> <li>Mailing of aging reports</li> <li>'Update' no longer clobbers saved invoices and transactions</li> <li>Optimized HTML and JavaScript responses for faster page loading</li> </ul> <h1>New features</h1> <h2>Mailing of aging reports</h2> <p>Versions of LedgerSMB up to and including 1.4 had a function to mail aging reports to customers. With the release of 1.5, this functionality was accidentally removed: forgotten to be implemented in the refactoring of the last reporting functionalities being moved to "the new reporting framework". This was in 2016. Finally, this function has been <em><strong>added back</strong></em> into LedgerSMB as of the 1.9 release.</p> <h2>Customer/Vendor drop-down on invoices (and transactions) searchable</h2> <p>The customer/vendor selection drop-down on AR/AP transactions and invoices has been replaced with an input element which filters available names based on input entered. Before, there was a regular drop-down listing a fixed list of choices. However, when the number of customers gets too big, that's an impractical way of selecting a customer or vendor. Therefore, another input selection mechanism was available where a regular textbox was used to search the desired customer/vendor on 'Update'. This new feature provides good middle ground. If your database is configured to use the regular textbox, entering a high enough number in the "Max per drop-down" setting in the "System &gt; Defaults" screen enables this new functionality (for drop-downs no larger than the specified number of items).</p> <h2>E-mailed documents stored in the database</h2> <p>Invoices and aging reports, when mailed, are now stored in the database. This provides the opportunity to download the documents for inspection from the e-mail entry screen as well as that it serves as an archive of what has been sent to whom. In the past, there was no way to check emails having been sent, other than by including oneself as a Bcc recipient.</p> <h2>Searching open invoices for bulk payment by customer/vendor name</h2> <p>This release adds the option to select invoices offered for payment in the bulk-payment screen by vendor/customer name in addition to the (existing) option to select invoices by vendor/customer number.</p> <h2>A new command line application for administrative tasks and automation</h2> <p>A new command line application "ledgersmb-admin" offers the ability to run a number of administrative commands from the command line (instead of from "setup.pl"). The following commands have been implemented so far:</p> <ul> <li>Database management commands <ul> <li>backup<br /> creates backups of a database</li> <li>copy<br /> creates copies of a database</li> <li>create<br /> creates a new database, optionally with configuration and a user</li> <li>destroy<br /> removes a database</li> <li>rename<br /> renames a database, while retaining access rights for existing users</li> <li>restore<br /> restores a database from a backup file created with the "backup" command</li> <li>upgrade<br /> upgrades a database's schema and stored procedures for a new application version</li> </ul> </li> <li>Company management commands <ul> <li>template<br /> imports, exports and lists templates in a company</li> </ul> </li> </ul> <p>More commands are expected to be available on 1.10 or later.</p> <h2>Replace "Ignore Year-ends" with opening or closing balances on balance sheet report</h2> <p>Before this release, there was an option to either include or ignore "year ends" when running the balance sheet report. This type of input was deemed too technical: the actual question the application was trying to ask was whether the user is trying to run an opening or a closing balance at the given date. Exactly <em>how</em> the application achieves that, is an implementation detail that involves date calculus and in-/exclusion of "year ends". These technicalities have now been hidden from the user.</p> <p>The Income Statement and Trial balance report have been aligned to reconcile with the "Closing balance" report (the default) of the balance sheet: both reports run from the opening balance of the start date to the closing balance of the end date.</p> <h1>Notable changes</h1> <h2>'Update' no longer clobbers saved invoices and transactions</h2> <p>For a long time the function has existed in LedgerSMB whereby a user can save a transaction in order to store it and either work on it later, or post it later. The function has been broken for quite a while due to the fact that clicking "Update" on a saved transaction (or invoice) would restore the transaction to its saved state - undoing all work done on the saved transaction to prepare it for posting. Technically, it was a complex task to prevent the entered data from being reverted to the original state, but the 1.9 release finally fixes this issue which was filed in 2015.</p> <h2>Optimized HTML and JavaScript responses for faster page loading</h2> <p>Extensive research has been performed on what determined the response times for HTML pages. Many small code changes were implemented to speed up page response times, shaving off some 30% of the response time of a huge GL search report.</p> <p>Additionally, a lot of research went into finding ways to reduce the size of the JavaScript files being used by the application as well as reducing the number of requests to load these files into the browser. As a result, LedgerSMB now uses <a href="https://webpack.js.org/guides/installation/">Webpack</a> to process JavaScript source files from our own project, <a href="https://dojotoolkit.org/">Dojo Toolkit</a> and JS dependencies from NPM. Further research to increase JS performance is on-going, even after the 1.9 release, all in terms of number of dependencies, code size and execution speed.</p> <h2>"GIFI" selections are now hidden when no GIFI is configured</h2> <p>Most installations don't need GIFI codes for their accounts: it's a canadian coding system required by law to support government reporting. Often, it's being used for alternative reporting classifications for companies outside of Canada. When neither is the case, GIFI would be offered as a search delimiter in many places. Now, GIFI input boxes are being suppressed when no GIFI is configured for the company. As soon as a single GIFI code is configured, the codes will show in the UI again.</p> <h1>Other user-visible changes</h1> <ul> <li>The list of country names in the preferences screen is now translated to the selected language</li> <li>The invoice entry screen now links to the customer/vendor screen with the customer/vendor preselected</li> <li>Faster calculation of the balance sheet report</li> <li>Faster population of the list of currencies (applies to all screens with a currency drop-down)</li> <li>All non-required drop-downs now contain an empty value that can be selected to undo the selection of a non-empty value</li> <li>Orders and invoices show history: e.g. saving, posting, printing and mailing</li> <li>Improved error reporting and handling on failure with Print buttons</li> <li>E-mailed invoices generated based on the data in the database instead of the data visible (and editable!) on-screen ensuring consistency between invoice and stored data</li> </ul> <h1>Known problems</h1> <p> </p> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>ehu</span></span> <span class="field field--name-created field--type-created field--label-hidden">Sun, 08/22/2021 - 06:58</span> <div class="field field--name-field-topic field--type-entity-reference field--label-above"> <div class="field__label">Topic</div> <div class="field__items"> <div class="field__item"><a href="/index.php/taxonomy/term/148" hreflang="en">Draft</a></div> <div class="field__item"><a href="/index.php/taxonomy/term/145" hreflang="en">Release notes</a></div> </div> </div> <div class="field field--name-field-release field--type-entity-reference field--label-above"> <div class="field__label">Release</div> <div class="field__items"> <div class="field__item"><a href="/index.php/taxonomy/term/149" hreflang="en">1.9</a></div> </div> </div> <section class="field field--name-comment-node-article field--type-comment field--label-hidden comment-wrapper"> </section> Sun, 22 Aug 2021 13:58:02 +0000 ehu 545 at https://ledgersmb.org https://ledgersmb.org/index.php/content/19-release-notes#comments Using Docker to develop LedgerSMB https://ledgersmb.org/index.php/content/using-docker-develop-ledgersmb <span class="field field--name-title field--type-string field--label-hidden">Using Docker to develop LedgerSMB</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Getting all the development dependencies and a working copy for LedgerSMB can be time consuming and complex. However, using our <a href="https://docs.docker.com/compose/">Docker Compose</a> infrastructure reduces this to four simple steps:</p> <ol> <li><a href="https://docs.docker.com/engine/installation/">Install Docker</a></li> <li><a href="https://docs.docker.com/compose/install/">Install Docker Compose</a></li> <li>Clone the <a href="https://github.com/ledgersmb/LedgerSMB">LedgerSMB repository</a> from GitHub</li> <li>Clone the <a href="https://github.com/ledgersmb/ledgersmb-dev-docker">LedgerSMB Development Docker repository</a> from GitHub</li> </ol> <p>(And start the infrastructure from the docker compose file.)</p> <h1>Example</h1> <p>The example below works on Debian Stretch:</p> <h2 class="perl">Install Docker</h2> <div class="geshifilter"><pre class="perl geshifilter-perl">$ sudo apt<span class="sy0">-</span>get install \ apt<span class="sy0">-</span>transport<span class="sy0">-</span>https \ ca<span class="sy0">-</span>certificates \ curl \ gnupg2 \ software<span class="sy0">-</span>properties<span class="sy0">-</span>common $ curl <span class="sy0">-</span>fsSL https<span class="sy0">://</span>download<span class="sy0">.</span>docker<span class="sy0">.</span>com<span class="sy0">/</span>linux<span class="sy0">/</span><span class="co5">$(</span><span class="sy0">.</span> <span class="sy0">/</span>etc<span class="sy0">/</span>os<span class="sy0">-</span>release<span class="sy0">;</span> echo <span class="st0">"$ID"</span><span class="br0">)</span><span class="sy0">/</span>gpg <span class="sy0">|</span> sudo apt<span class="sy0">-</span>key add <span class="sy0">-</span> $ sudo add<span class="sy0">-</span>apt<span class="sy0">-</span>repository \ <span class="st0">"deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "</span><span class="re0">$ID</span><span class="st0">") <span class="es0">\</span> $(lsb_release -cs) <span class="es0">\</span> stable"</span> $ sudo apt<span class="sy0">-</span>get update $ sudo apt<span class="sy0">-</span>get install docker<span class="sy0">-</span>ce</pre></div> <h2>Install Docker Compose</h2> <p>Check the latest release at <a href="https://github.com/docker/compose/releases/">https://github.com/docker/compose/releases/</a> (and replace 1.17.0 with it)</p> <div class="geshifilter"><pre class="bash geshifilter-bash">$ <span class="kw2">sudo</span> curl <span class="re5">-L</span> https:<span class="sy0">//</span>github.com<span class="sy0">/</span>docker<span class="sy0">/</span>compose<span class="sy0">/</span>releases<span class="sy0">/</span>download<span class="sy0">/</span>1.17.0<span class="sy0">/</span>docker-compose-<span class="sy0">`</span><span class="kw2">uname</span> -s<span class="sy0">`</span>-<span class="sy0">`</span><span class="kw2">uname</span> -m<span class="sy0">`</span> \ <span class="re5">-o</span> <span class="sy0">/</span>usr<span class="sy0">/</span>local<span class="sy0">/</span>bin<span class="sy0">/</span>docker-compose $ <span class="kw2">sudo</span> <span class="kw2">chmod</span> +x <span class="sy0">/</span>usr<span class="sy0">/</span>local<span class="sy0">/</span>bin<span class="sy0">/</span>docker-compose</pre></div> <h2>Install docker compose bash completion (optional)</h2> <div class="geshifilter"><pre class="bash geshifilter-bash">$ <span class="kw2">sudo</span> curl <span class="re5">-L</span> https:<span class="sy0">//</span>raw.githubusercontent.com<span class="sy0">/</span>docker<span class="sy0">/</span>compose<span class="sy0">/</span>1.17.0<span class="sy0">/</span>contrib<span class="sy0">/</span>completion<span class="sy0">/</span>bash<span class="sy0">/</span>docker-compose \ <span class="re5">-o</span> <span class="sy0">/</span>etc<span class="sy0">/</span>bash_completion.d<span class="sy0">/</span>docker-compose</pre></div> <h2>Clone the LedgerSMB repository from GitHub (checks out 'master' branch)</h2> <div class="geshifilter"><pre class="bash geshifilter-bash">$ <span class="kw2">git clone</span> https:<span class="sy0">//</span>github.com<span class="sy0">/</span>ledgersmb<span class="sy0">/</span>LedgerSMB.git ledgersmb $ <span class="kw3">cd</span> ledgersmb <span class="sy0">&amp;&amp;</span> <span class="kw2">git submodule</span> update <span class="re5">--init</span> <span class="re5">--recursive</span> <span class="sy0">&amp;&amp;</span> <span class="kw3">cd</span> ..</pre></div> <h2 class="perl">Clone the LedgerSMB Development Docker repository from GitHub</h2> <div class="geshifilter"><pre class="bash geshifilter-bash"><span class="co4">$ </span><span class="kw2">git clone</span> https:<span class="sy0">//</span>github.com<span class="sy0">/</span>ledgersmb<span class="sy0">/</span>ledgersmb-dev-docker.git lsmb-dev-docker</pre></div> <p class="perl"> </p> <p>At this point you are set up to start developing and testing LedgerSMB; in order to test your changes in a running LedgerSMB instance, run:</p> <div class="geshifilter"><pre class="bash geshifilter-bash">$ <span class="kw3">cd</span> ledgersmb $ ..<span class="sy0">/</span>lsmb-dev-docker<span class="sy0">/</span>lsmb-dev master up <span class="re5">-d</span></pre></div> <p>This command starts the container infrastructure (using the names "ldmaster-lsmb", "ldmaster-proxy" and "ldmaster-db" for the LedgerSMB, NGinx and PostgreSQL containers respectively), taking the sources in the current directory (ledgersmb) to run the application. It also starts a Selenium grid to allow browser tests.</p> <h1>Notes</h1> <h2>File permissions</h2> <p>You may run into problems with file permissions if you want to run commands inside the containers which try to modify your local repository. You will need to either recursively set the file ownership to this user in your local tree, assign liberal 0777 (directory) and 0666 (file) permissions or execute the commands inside the container as root.</p> <h2>Example using www-data user, after you fix your file permissions:</h2> <div class="geshifilter"><pre class="bash geshifilter-bash">docker <span class="kw3">exec</span> <span class="re5">-ti</span> ldmaster-lsmb <span class="kw2">bash</span> www-data<span class="sy0">@</span>90451823cb57:<span class="sy0">/</span>srv<span class="sy0">/</span>ledgersmb$ <span class="kw2">make</span> dojo</pre></div> <h3>Example using root inside the container:</h3> <div class="geshifilter"><pre class="bash geshifilter-bash">docker <span class="kw3">exec</span> <span class="re5">-ti</span> <span class="re5">--user</span>=root ldmaster-lsmb <span class="kw2">bash</span></pre></div> <h2>Cache issues</h2> <p>The container is set up with template caching enabled. This means that you'll need to restart the container after code changes to see them. This is a simple:</p> <div class="geshifilter"><pre class="bash geshifilter-bash"><span class="co4">$ </span>..<span class="sy0">/</span>lsmb-dev-docker<span class="sy0">/</span>lsmb-dev master restart</pre></div> <h2>Supported versions</h2> <p>The development container infrastructure only supports development of 1.5 and never versions of LedgerSMB.</p> <p>Enjoy!</p> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>freelock</span></span> <span class="field field--name-created field--type-created field--label-hidden">Sat, 01/14/2017 - 09:38</span> <div class="field field--name-field-topic field--type-entity-reference field--label-above"> <div class="field__label">Topic</div> <div class="field__items"> <div class="field__item"><a href="/index.php/topics/development" hreflang="en">Development</a></div> </div> </div> <div class="field field--name-field-operating-system field--type-entity-reference field--label-above"> <div class="field__label">Operating system</div> <div class="field__items"> <div class="field__item"><a href="/index.php/operating-system/linux" hreflang="en">Linux</a></div> </div> </div> <div class="field field--name-field-release field--type-entity-reference field--label-above"> <div class="field__label">Release</div> <div class="field__items"> <div class="field__item"><a href="/index.php/release/15" hreflang="en">1.5</a></div> <div class="field__item"><a href="/index.php/taxonomy/term/142" hreflang="en">1.6</a></div> <div class="field__item"><a href="/index.php/taxonomy/term/146" hreflang="en">1.7</a></div> <div class="field__item"><a href="/index.php/taxonomy/term/147" hreflang="en">1.8</a></div> <div class="field__item"><a href="/index.php/taxonomy/term/149" hreflang="en">1.9</a></div> <div class="field__item"><a href="/index.php/taxonomy/term/150" hreflang="en">1.10</a></div> </div> </div> <div class="field field--name-field-faq-category field--type-entity-reference field--label-above"> <div class="field__label">FAQ Category</div> <div class="field__item"><a href="/index.php/faq-categories/contributing" hreflang="en">Contributing</a></div> </div> <section class="field field--name-comment-node-article field--type-comment field--label-hidden comment-wrapper"> </section> Sat, 14 Jan 2017 17:38:23 +0000 freelock 369 at https://ledgersmb.org https://ledgersmb.org/index.php/content/using-docker-develop-ledgersmb#comments Upgrade to LedgerSMB 1.9 https://ledgersmb.org/index.php/content/upgrade-ledgersmb-19 <span class="field field--name-title field--type-string field--label-hidden">Upgrade to LedgerSMB 1.9</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><h1>Overview</h1> <p>Company database upgrades are supported all the way back from 1.4 directly to 1.9, using the 1.9 software. Company database upgrades from 1.3 and 1.2 are also supported, but due to the different nature of the upgrade process are called "migrations". The important difference being that when doing a migration, a copy of the data is being created in the 1.9 structure, while upgrades adjust the existing structure for 1.9. When upgrading from versions earlier than 1.8, please read the release notes and upgrade instructions and release notes of all the intermediate versions: these still apply but are not repeated here.</p> <p>Before starting, please remember:</p> <ul> <li>Create a backup</li> <li>Don't do this when you're in a hurry</li> <li>When running into problems, check out the "Support" page</li> </ul> <h1>Technical upgrade</h1> <p>Upgrading the software works the same as with prior versions. Please refer to <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="4685b86d-228f-422b-bbe2-dd4972cca35d" href="/index.php/content/upgrade-ledgersmb-18" title="Upgrade to LedgerSMB 1.8">the procedure to upgrade a tarball installation for 1.</a><a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="7fc47818-9b1b-429e-8dc9-1324df2aa367" href="/index.php/content/upgrade-ledgersmb-17-16-or-15" title="Upgrade to LedgerSMB 1.7 (from 1.6 or 1.5)">7</a> for the 1.9 upgrade. Be sure to install the <a href="https://github.com/ledgersmb/LedgerSMB/blob/1.9/Changelog#L74-L90">new and updated Perl module dependencies listed in the Changelog</a>. Also note that the Docker image definition contains <a href="https://github.com/ledgersmb/ledgersmb-docker/blob/1.9/Dockerfile#L30">a comprehensive list of Debian Buster package dependencies</a>.</p> <p>&lt;Upgrading docker &amp; docker compose to be written&gt;</p> <h1>Company database upgrade</h1> <p>Technically, this process hasn't changed since 1.7 and <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="7fc47818-9b1b-429e-8dc9-1324df2aa367" href="/index.php/content/upgrade-ledgersmb-17-16-or-15" id="#upgrade-database" title="Upgrade to LedgerSMB 1.7 (from 1.6 or 1.5)">the instructions for 1.7</a> still apply.</p> <p>Each new LedgerSMB release has tightened the checks on validity of the data stored in the database. 1.9 continues on that path and adds yet more checks - this helps us find bugs and prevents undesirable data entering into the ledger. During the upgrade, existing data is checked against these new quality criteria and optionally offered for correction (or deletion, depending on the type of inconsistency).</p> <h2>Before you begin</h2> <ul> <li>Verify that all Reconciliation Reports have been either approved or deleted<br /> If you forget this step, the migration will offer to delete it for you; approval isn't supported during migration. Note that this does <em>not</em> refer to <em>transactions</em>; unapproved transactions can safely exist during upgrade.</li> <li>Create a backup</li> <li>Tell users not to use your system during upgrade</li> </ul> <h2><a id="after-upgrade" name="after-upgrade"></a>After the upgrade</h2> <p>&lt;No known items at the moment&gt;</p> <ul> </ul> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>ehu</span></span> <span class="field field--name-created field--type-created field--label-hidden">Sat, 08/28/2021 - 07:51</span> <div class="field field--name-field-topic field--type-entity-reference field--label-above"> <div class="field__label">Topic</div> <div class="field__items"> <div class="field__item"><a href="/index.php/topics/upgrade" hreflang="en">Upgrade</a></div> <div class="field__item"><a href="/index.php/topic/installation" hreflang="en">Installation</a></div> </div> </div> <div class="field field--name-field-release field--type-entity-reference field--label-above"> <div class="field__label">Release</div> <div class="field__items"> <div class="field__item"><a href="/index.php/taxonomy/term/149" hreflang="en">1.9</a></div> </div> </div> <section class="field field--name-comment-node-article field--type-comment field--label-hidden comment-wrapper"> </section> Sat, 28 Aug 2021 14:51:53 +0000 ehu 554 at https://ledgersmb.org https://ledgersmb.org/index.php/content/upgrade-ledgersmb-19#comments Installing LedgerSMB 1.8 https://ledgersmb.org/index.php/content/installing-ledgersmb-18 <span class="field field--name-title field--type-string field--label-hidden">Installing LedgerSMB 1.8</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><h1>Installation from tarballs</h1> <p>This page contains the comprehensive version with the installation instructions for LedgerSMB 1.8 targetting a production installation <strong>from release tarballs</strong> and deals with these steps:</p> <ul> <li>Installing the LedgerSMB Perl module dependencies</li> <li>Configuring the PostgreSQL server</li> <li>Configuring a webserver</li> <li>Configuring LedgerSMB</li> </ul> <p>If you already have all of the above, please proceed to the <a href="http://ledgersmb.org/topic/preparing/preparing-ledgersmb-15-first-use">"Preparing for first use" guide</a>.</p> <p><!--break--></p> <p><em><strong>These are </strong></em><strong>not</strong><em><strong> the <a href="https://github.com/ledgersmb/LedgerSMB#quick-start">Quick start instructions</a>, but instructions for setting up a full production system. Also, please note that if you're in a position to use <a href="https://hub.docker.com/r/ledgersmb/ledgersmb/">LedgerSMB's Docker images</a>, or <a href="/node/140">packages for your Unix/Linux distribution</a>, using those will be far quicker and easier than following the instructions below.</strong></em></p> <p><em>Feel free to log in and share your experiences in the comments at the end of the article.</em></p> <h2><a>System requirements</a></h2> <p>Requirements are documented on the <a href="https://ledgersmb.org/content/system-requirements">system requirements page</a>.</p> <h3>Client</h3> <p>There are no specific requirements for LedgerSMB clients (web browsers) other than that they should be able to run recente enough (post-2017) JavaScript. In summary, a broad range of browsers is supported (Chrome, FireFox, Opera, ...), including Microsoft Edge.</p> <p>Browsers explicitly not supported are:</p> <ul> <li>Lynx</li> <li>w3m</li> <li>Internet Explorer</li> </ul> <h2>Unpacking the release tarball</h2> <p>According to the <a href="https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard">Filesystem Hierarchy Standard</a>, both /usr/local/ledgersmb and /opt/ledgersmb could be chosen as install locations. Unpack the tarball by running (as "root" user):</p> <pre> # tar xf ledgersmb-1.8.x.tar.gz --directory /usr/local/</pre> <h2><a>Installing the LedgerSMB Perl module dependencies</a></h2> <p>Please note that some distributions (e.g. Fedora) do not by default install <em>all</em> core modules, but rather, install a subset. LedgerSMB doesn't list core modules as dependencies as they should be available.</p> <p>The instructions below assume all dependencies will be installed from CPAN. It is however possible to install most modules from distribution repositories. The Docker image can be consulted for <a href="https://github.com/ledgersmb/ledgersmb-docker/blob/1.6/Dockerfile#L27-L56">an example</a>.</p> <p><code><strong># Installation of LedgerSMB Perl dependencies from CPAN</strong><br /> cpanm --quiet --notest --with-feature=starman --installdeps /usr/local/ledgersmb/</code></p> <p>Then, there are a number of features which need additional modules.<br /> The above command includes the Starman Feature which is required for most installations.<br /> The modules required for each feature can be installed by appending "--with-feature=&lt;feature-name&gt;" to the above command line.</p> <p>These features are supported:</p> <table> <thead> <tr> <th>Feature</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>latex-pdf-ps</code></td> <td>Enable PDF and PostScript output<br /> <em>Note</em>: In order to make use of this functionality, the server must also have 'latex' or 'xelatex' installed. On many distributions, these packages are called 'texlive-latex' and 'texlive-tetex' respectively.</td> </tr> <tr> <td><code>latex-pdf-images</code></td> <td>Image size detection for PDF output</td> </tr> <tr> <td><code>starman</code></td> <td>Starman Perl/PSGI (standalone) web server</td> </tr> <tr> <td><code>openoffice</code></td> <td>OpenOffice.org document output</td> </tr> <tr> <td><code>edi</code></td> <td>(EXPERIMENTAL) X12 EDI support</td> </tr> </tbody> </table> <p> </p> <p><code><strong># Installation of LedgerSMB Perl dependencies directly from CPAN<br /> # With Starman and PDF &amp; Postscript output</strong><br /> cpanm --quiet --notest --with-feature=starman --with-feature=latex-pdf-ps \<br /> --installdeps /usr/local/ledgersmb/</code></p> <h2><a>Configuring the PostgreSQL server</a></h2> <p>There are only two requirements for the PostgreSQL database server. This section instructs how to configure an pre-installed PostgreSQL installation to meet those requirements. It's assumed that the LedgerSMB server and PostgreSQL are being run on the same system. The requirements to meet are:</p> <ol> <li>A database administrator user (in PostgreSQL called a 'role') for creation and administration of LedgerSMB company databases</li> <li>Authorization setup so the database administrator can log into the database through LedgerSMB's 'setup.pl' program</li> </ol> <h3><a>Creating the company database administrator account</a></h3> <p>The database administrator user account needs to have at the bare minimum:</p> <ul> <li>The right to create databases (CREATEDB)</li> <li>The right to create roles (CREATEROLE)</li> <li>The right to log in (LOGIN)</li> <li>A password to authenticate logins</li> </ul> <p>The following command issued as root user, creates a user named "lsmb_dbadmin" (which isn't a super user):</p> <p><code><code># su - postgres -c 'createuser -S -d -r -l -P lsmb_dbadmin'<br /> Enter password for new role: <strong>************</strong><br /> Enter it again: <strong>************</strong></code></code></p> <h3><a>Configuring database access rights</a></h3> <p>PostgreSQL takes its access configuration through a file called 'pg_hba.conf'. The location of this file may differ per distribution:</p> <ul> <li>Debian derivatives: /etc/postgresql/&lt;version&gt;/&lt;cluster&gt;/pg_hba.conf</li> <li>RedHat derivatives: /var/lib/pgsql/&lt;version&gt;/data/pg_hba.conf</li> </ul> <p>On most systems, this file has four effective lines:</p> <p><code>local   all             postgres                                peer<br /> local   all             all                                     peer<br /> host    all             all             127.0.0.1/32            peer<br /> host    all             all             ::1/128                 peer</code></p> <p>These lines mean that each system user can connect to the database system with an equally named database user; the connecting source doesn't make a difference: unix and TCP/IP sockets have the same configuration.</p> <p>The LedgerSMB software needs to be able to connect to the database system as 'lsmb_dbadmin' or as a LedgerSMB user, not as the user that runs the server process. The new content should look like:</p> <p><code>local   all             postgres                         peer<br /> local   all             all                              peer<br /> host    all             postgres         127.0.0.1/32     reject<br /> host    all             postgres        ::1/128      reject<br /> host    postgres,template0,template1   lsmb_dbadmin         127.0.0.1/32     md5<br /> host    postgres,template0,template1   lsmb_dbadmin         ::1/128      md5<br /> host    postgres,template0,template1   all          127.0.0.1/32     reject<br /> host    postgres,template0,template1   all          ::1/128      reject<br /> host    all             all             127.0.0.1/32     md5<br /> host    all             all             ::1/128          md5</code></p> <p>This configuration takes advantage of the fact that each connection method (unix sockets vs TCP/IP sockets/addresses) can be separately configured. While the default connection method of the 'psql' tool is to connect over the 'local' (unix socket method), the default connection method for LedgerSMB is to use 'localhost' (127.0.0.1/32 or ::1/128).</p> <p>The above configuration means that the user 'postgres' can't be used any longer to connect from 'localhost', no user can connect to the 'postgres' database through 'localhost' [reject] and all other combinations of users and database names need password authentication [md5].</p> <p>Notes:</p> <ol> <li>PostgreSQL matches the lines first to last and uses the first matching line, so <strong>the order of the lines is very importance</strong>.</li> <li>For more information about the pg_hba.conf configuration options, see the <a href="https://www.postgresql.org/docs/9.4/static/auth-pg-hba-conf.html">PostgreSQL pg_hba.conf documentation</a></li> <li>The databases 'template1' and 'template0' are system databases available in every cluster; this configuration blocks those for access from LedgerSMB as well.</li> </ol> <p>After reconfiguring pg_hba.conf, the PostgreSQL service needs to be restarted. this works with one of the following commands (depending on your distribution):</p> <p><code><strong># restarting postgresql service (as root)</strong><br /> # service postgresql restart<br /> <strong># - or -:</strong><br /> $ service postgresql-&lt;version&gt; restart</code></p> <p><a>Verifying database access</a></p> <p>To verify access for the database admin user 'lsmb_dbadmin', an accessible database - not named 'postgres', 'template0' or 'template1' - is required. On new installs, these are the only databases. So the next example creates one. Here's how to verify the setup:</p> <p><code><strong># Verify access configuration (run as root)</strong><br /> $ su - postgres -c 'createdb lsmb_access_test_db'<br /> $ psql -h localhost -U lsmb_dbadmin -d lsmb_access_test_db -c "select version()"<br /> PostgreSQL 9.6.3 &lt;--- this line indicates success("9.6.3" is just an example version number)<br /> $ su - postgres -c 'dropdb lsmb_access_test_db'</code></p> <p><a>Configuring a web server</a></p> <p>Regardless of your web server setup, configuration of an "application server" is required. The application server used with LedgerSMB can be any PSGI compatible server. The default application server is Starman, which is widely considered the fastest available. The Starman server process lives behind a <a href="https://en.wikipedia.org/wiki/Reverse_proxy">reverse proxy</a>. While Starman deals specifically with those HTTP requests which require "application logic", all other requests (mostly static content, such as images or CSS) are dealt with by the proxy.</p> <h3><a>Configuring the Starman application server</a></h3> <p>Depending on the distribution, a startup method must be installed; this can be one of:</p> <ul> <li>SysV init script</li> <li>Upstart configuration</li> <li>Systemd configuration</li> </ul> <p>At the time of writing, the only configuration that comes with LedgerSMB's tarball is the systemd configuration. The following common setup is required regardless of the system used to manage services on the target system.</p> <p>To support priviledge separation, the Starman server should be running as a user which meets these criteria:</p> <ul> <li>Not the same user as the web server</li> <li>Does not have write access to the LedgerSMB directories</li> </ul> <p>To that extent, identify an existing (unused) system user, or create one with this command:</p> <p><code><strong># create 'ledgersmb' user for Starman server to run</strong><br /> $ useradd -d /non-existent -r -U -c "LedgerSMB/Starman service system user" ledgersmb</code></p> <h4><a>Configuring systemd for Starman</a></h4> <p>In the directory conf/systemd/ from the tarbal, there is a preconfigured systemd service file, which needs to be copied into place. In case you decided to install dependencies into a local::lib, the service file needs to be edited to set a PERL5LIB environment variable before you can succesfully start the service.</p> <p><code><strong># 'copy' systemd service configuration, enable and start</strong><br /> $ sed -e "s#WORKING_DIR#$PWD#" conf/systemd/ledgersmb_starman.service \<br /> | sudo tee /etc/systemd/system/ledgersmb-starman.service</code><br /> <code>$ systemctl enable ledgersmb-starman<br /> $ service ledgersmb-starman start</code></p> <p>Note that the above assumes that the commands are being run from the root of the unpacked tarball. It also assumes that the tarball has been unpacked at its installation path.</p> <p>To verify that the service started up correctly, run:</p> <p><code><strong># verify that the Starman/LedgerSMB server started correctly</strong><br /> $ journalctl -u ledgersmb-starman.service --since="today" -l -e</code></p> <h3><a>Configuring a reverse proxy</a></h3> <p>For a quick test-run or demo setup running on localhost only, configuration of a proxy isn't mandatory. However, for a production setup with LedgerSMB being network or even web-exposed, it's ill-advised to run without the reverse proxy for - at least - the following reasons:</p> <ul> <li>The proxy can serve static content [much] more efficiently (performance)</li> <li>The proxy can support HTTP/2 which multiplexes requests (performance)</li> <li>The proxy guards Starman against public exposure (security)</li> <li>The proxy adds TLS (security)</li> </ul> <p>With TLS certificates being completely free these days through <a href="https://letsencrypt.org/">Let's Encrypt</a>, and only a few dollars for the simplest of certificates from commercial vendors, there's really no reason <em>not</em> to secure traffic to the server. Further documentation below assumes you have such a certificate. As for getting Let's Encrypt certificates, use their <a href="https://letsencrypt.org/getting-started/">Getting Started guide</a>.</p> <p>For simplicity, only the configuration of nginx as a reverse proxy is documented here.</p> <h4><a>Configuring nginx</a></h4> <p>The tarball contains an example virtual host configuration file to set up a reverse proxy with nginx. It needs to be included in the 'http { }' block in your nginx configuration. On Debian derived systems, this is done by copying the file to /etc/nginx/sites-available/ledgersmb.conf. On RedHat/Fedora derivatives, the copying goes to /etc/nginx/conf.d/ledgersmb.conf. After editing the file, replacing the following variables:</p> <ul> <li><working_dir> Same replacement as before</working_dir><br /></li> <li>SSL_CERT_FILE<br /> Should be where your certificate file is stored; probably /etc/certs/your_host.example.com.pem</li> <li>SSL_KEY_FILE<br /> Probably the same as the SSL_CERT_FILE, but with '.key' extension</li> <li>YOUR_SERVER_NAME<br /> If nothing else, should be replaced by the output of the command 'hostname -f'</li> </ul> <p>NOTE: by default snakeoil certificates will be used by at least our nginx sample config files.<br /> These certificates are locally created and will normally require your browser clients to override something before they can be used.</p> <p>On Debian derivatives, activate this file after it has been edited, using:</p> <p><code><strong># On Debian/Ubuntu/Mint activate the virtual host</strong><br /> $ ln -s /etc/nginx/sites-available/ledgersmb.conf /etc/nginx/sites-enabled/</code></p> <p>On RedHat/Fedora derivatives, no symlinking is necessary: the configuration is active immediately. Now, verify that the configuration is acceptable:</p> <p><code><strong># (Re)start nginx service to make nginx reconfigure itself and validate configuration</strong><br /> $ service nginx restart</code></p> <h2><a>Configuring LedgerSMB</a></h2> <p>The tarball has a default LedgerSMB configuration file conf/ledgersmb.conf.default. Install the configuration file with:</p> <p><code><strong># Install the default ledgersmb.conf configuration file</strong><br /> $ cp conf/ledgersmb.conf.default ledgersmb.conf</code></p> <p>That is it.</p> <p>In case the in-app e-mail feature is going to be used, check the values in the [mail] section and optionally adjust for the mail setup of the target system.</p> <h2>Next steps</h2> <p>Now follow the instructions in the <a href="http://ledgersmb.org/topic/preparing/preparing-ledgersmb-15-first-use">"Prepare LedgerSMB for first use" guide</a>.</p> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>ehu</span></span> <span class="field field--name-created field--type-created field--label-hidden">Fri, 09/04/2020 - 11:34</span> <div class="field field--name-field-topic field--type-entity-reference field--label-above"> <div class="field__label">Topic</div> <div class="field__items"> <div class="field__item"><a href="/index.php/topic/installation" hreflang="en">Installation</a></div> </div> </div> <div class="field field--name-field-release field--type-entity-reference field--label-above"> <div class="field__label">Release</div> <div class="field__items"> <div class="field__item"><a href="/index.php/taxonomy/term/147" hreflang="en">1.8</a></div> </div> </div> <section class="field field--name-comment-node-article field--type-comment field--label-hidden comment-wrapper"> </section> Fri, 04 Sep 2020 18:34:36 +0000 ehu 484 at https://ledgersmb.org https://ledgersmb.org/index.php/content/installing-ledgersmb-18#comments Installing LedgerSMB 1.9 https://ledgersmb.org/index.php/content/installing-ledgersmb-19 <span class="field field--name-title field--type-string field--label-hidden">Installing LedgerSMB 1.9</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><h1>Installation from tarballs</h1> <p>This page contains the comprehensive version with the installation instructions for LedgerSMB 1.8 targetting a production installation <strong>from release tarballs</strong> and deals with these steps:</p> <ul> <li>Installing the LedgerSMB Perl module dependencies</li> <li>Configuring the PostgreSQL server</li> <li>Configuring a webserver</li> <li>Configuring LedgerSMB</li> </ul> <p>If you already have all of the above, please proceed to the <a href="http://ledgersmb.org/topic/preparing/preparing-ledgersmb-15-first-use">"Preparing for first use" guide</a>.</p> <p><!--{C}%3C!%2D%2Dbreak%2D%2D%3E--></p> <p><em><strong>These are </strong></em><strong>not</strong><em><strong> the <a href="https://github.com/ledgersmb/LedgerSMB#quick-start">Quick start instructions</a>, but instructions for setting up a full production system. Also, please note that if you're in a position to use <a href="https://hub.docker.com/r/ledgersmb/ledgersmb/">LedgerSMB's Docker images</a>, or <a href="/node/140">packages for your Unix/Linux distribution</a>, using those will be far quicker and easier than following the instructions below.</strong></em></p> <p>Please note that installation of version 1.5 and up is completely different from the installation of versions 1.4 or earlier: This version uses <a href="http://search.cpan.org/~miyagawa/Plack/">Plack</a> to handle integration with front-end web servers. This means LedgerSMB can now be run in combination with many web servers, including (but not limited to):</p> <ul> <li><a href="http://nginx.org/">nginx</a></li> <li><a href="http://search.cpan.org/~miyagawa/Starman/">Starman</a></li> <li><a href="http://www.lighttpd.net/">lighttpd</a></li> <li><a href="http://httpd.apache.org">Apache</a></li> </ul> <p>It's no longer possible to run LedgerSMB as set of CGI scripts. This should not be a big concern, since Plack allows plugging LedgerSMB into Apache using mod_fcgid, mod_fastcgi or mod_proxy all of which have been available for versions 2.0 and up.</p> <p><em><strong>Feel free to log in and share your experiences in the comments at the end of the article.</strong></em></p> <h2><a>System requirements</a></h2> <p>Requirements are documented on the <a href="https://ledgersmb.org/content/system-requirements">system requirements page</a>.</p> <h3>Client</h3> <p>There are no specific requirements for LedgerSMB clients (web browsers) other than that they should have JavaScript enabled and be <a href="http://dojotoolkit.org/reference-guide/1.10/releasenotes/1.10.html#user-agent-support">able to run Dojo 1.16</a>.</p> <p>A broad range of browsers is supported (Chrome, FireFox, Opera, ...), including Microsoft Internet Explorer (10 or newer) and Microsoft Edge.</p> <p>Browsers explicitly not supported are:</p> <ul> <li>Lynx</li> <li>w3m</li> <li>IE9 or earlier</li> </ul> <h2>Unpacking the release tarball</h2> <p>According to the <a href="https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard">Filesystem Hierarchy Standard</a>, both /usr/local/ledgersmb and /opt/ledgersmb could be chosen as install locations. Unpack the tarball by running (as "root" user):</p> <pre> # tar xf ledgersmb-1.8.x.tar.gz --directory /usr/local/</pre> <h2><a>Installing the LedgerSMB Perl module dependencies</a></h2> <p>Please note that some distributions (e.g. Fedora) do not by default install <em>all</em> core modules, but rather, install a subset. LedgerSMB doesn't list core modules as dependencies as they should be available.</p> <p>The instructions below assume all dependencies will be installed from CPAN. It is however possible to install most modules from distribution repositories. The Docker image can be consulted for <a href="https://github.com/ledgersmb/ledgersmb-docker/blob/1.6/Dockerfile#L27-L56">an example</a>.</p> <p><code><strong># Installation of LedgerSMB Perl dependencies from CPAN</strong><br /> cpanm --quiet --notest --with-feature=starman --installdeps /usr/local/ledgersmb/</code></p> <p>Then, there are a number of features which need additional modules.<br /> The above command includes the Starman Feature which is required for most installations.<br /> The modules required for each feature can be installed by appending "--with-feature=&lt;feature-name&gt;" to the above command line.</p> <p>These features are supported:</p> <table> <thead> <tr> <th>Feature</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>latex-pdf-ps</code></td> <td>Enable PDF and PostScript output<br /> <em>Note</em>: In order to make use of this functionality, the server must also have 'latex' or 'xelatex' installed. On many distributions, these packages are called 'texlive-latex' and 'texlive-tetex' respectively.</td> </tr> <tr> <td><code>latex-pdf-images</code></td> <td>Image size detection for PDF output</td> </tr> <tr> <td><code>starman</code></td> <td>Starman Perl/PSGI (standalone) web server</td> </tr> <tr> <td><code>openoffice</code></td> <td>OpenOffice.org document output</td> </tr> <tr> <td><code>edi</code></td> <td>(EXPERIMENTAL) X12 EDI support</td> </tr> </tbody> </table> <p> </p> <p><code><strong># Installation of LedgerSMB Perl dependencies directly from CPAN<br /> # With Starman and PDF &amp; Postscript output</strong><br /> cpanm --quiet --notest --with-feature=starman --with-feature=latex-pdf-ps \<br /> --installdeps /usr/local/ledgersmb/</code></p> <h2><a>Configuring the PostgreSQL server</a></h2> <p>There are only two requirements for the PostgreSQL database server. This section instructs how to configure an pre-installed PostgreSQL installation to meet those requirements. It's assumed that the LedgerSMB server and PostgreSQL are being run on the same system. The requirements to meet are:</p> <ol> <li>A database administrator user (in PostgreSQL called a 'role') for creation and administration of LedgerSMB company databases</li> <li>Authorization setup so the database administrator can log into the database through LedgerSMB's 'setup.pl' program</li> </ol> <h3><a>Creating the company database administrator account</a></h3> <p>The database administrator user account needs to have at the bare minimum:</p> <ul> <li>The right to create databases (CREATEDB)</li> <li>The right to create roles (CREATEROLE)</li> <li>The right to log in (LOGIN)</li> <li>A password to authenticate logins</li> </ul> <p>The following command issued as root user, creates a user named "lsmb_dbadmin" (which isn't a super user):</p> <p><code><code># su - postgres -c 'createuser -S -d -r -l -P lsmb_dbadmin'<br /> Enter password for new role: <strong>************</strong><br /> Enter it again: <strong>************</strong></code></code></p> <h3><a>Configuring database access rights</a></h3> <p>PostgreSQL takes its access configuration through a file called 'pg_hba.conf'. The location of this file may differ per distribution:</p> <ul> <li>Debian derivatives: /etc/postgresql/&lt;version&gt;/&lt;cluster&gt;/pg_hba.conf</li> <li>RedHat derivatives: /var/lib/pgsql/&lt;version&gt;/data/pg_hba.conf</li> </ul> <p>On most systems, this file has four effective lines:</p> <p><code>local   all             postgres                                peer<br /> local   all             all                                     peer<br /> host    all             all             127.0.0.1/32            peer<br /> host    all             all             ::1/128                 peer</code></p> <p>These lines mean that each system user can connect to the database system with an equally named database user; the connecting source doesn't make a difference: unix and TCP/IP sockets have the same configuration.</p> <p>The LedgerSMB software needs to be able to connect to the database system as 'lsmb_dbadmin' or as a LedgerSMB user, not as the user that runs the server process. The new content should look like:</p> <p><code>local   all             postgres                         peer<br /> local   all             all                              peer<br /> host    all             postgres         127.0.0.1/32     reject<br /> host    all             postgres        ::1/128      reject<br /> host    postgres,template0,template1   lsmb_dbadmin         127.0.0.1/32     md5<br /> host    postgres,template0,template1   lsmb_dbadmin         ::1/128      md5<br /> host    postgres,template0,template1   all          127.0.0.1/32     reject<br /> host    postgres,template0,template1   all          ::1/128      reject<br /> host    all             all             127.0.0.1/32     md5<br /> host    all             all             ::1/128          md5</code></p> <p>This configuration takes advantage of the fact that each connection method (unix sockets vs TCP/IP sockets/addresses) can be separately configured. While the default connection method of the 'psql' tool is to connect over the 'local' (unix socket method), the default connection method for LedgerSMB is to use 'localhost' (127.0.0.1/32 or ::1/128).</p> <p>The above configuration means that the user 'postgres' can't be used any longer to connect from 'localhost', no user can connect to the 'postgres' database through 'localhost' [reject] and all other combinations of users and database names need password authentication [md5].</p> <p>Notes:</p> <ol> <li>PostgreSQL matches the lines first to last and uses the first matching line, so <strong>the order of the lines is very importance</strong>.</li> <li>For more information about the pg_hba.conf configuration options, see the <a href="https://www.postgresql.org/docs/9.4/static/auth-pg-hba-conf.html">PostgreSQL pg_hba.conf documentation</a></li> <li>The databases 'template1' and 'template0' are system databases available in every cluster; this configuration blocks those for access from LedgerSMB as well.</li> </ol> <p>After reconfiguring pg_hba.conf, the PostgreSQL service needs to be restarted. this works with one of the following commands (depending on your distribution):</p> <p><code><strong># restarting postgresql service (as root)</strong><br /> # service postgresql restart<br /> <strong># - or -:</strong><br /> $ service postgresql-&lt;version&gt; restart</code></p> <p><a>Verifying database access</a></p> <p>To verify access for the database admin user 'lsmb_dbadmin', an accessible database - not named 'postgres', 'template0' or 'template1' - is required. On new installs, these are the only databases. So the next example creates one. Here's how to verify the setup:</p> <p><code><strong># Verify access configuration (run as root)</strong><br /> $ su - postgres -c 'createdb lsmb_access_test_db'<br /> $ psql -h localhost -U lsmb_dbadmin -d lsmb_access_test_db -c "select version()"<br /> PostgreSQL 9.6.3 &lt;--- this line indicates success("9.6.3" is just an example version number)<br /> $ su - postgres -c 'dropdb lsmb_access_test_db'</code></p> <p><a>Configuring a web server</a></p> <p>Regardless of your web server setup, configuration of an "application server" is required. The application server used with LedgerSMB can be any PSGI compatible server. The default application server is Starman, which is widely considered the fastest available. The Starman server process lives behind a <a href="https://en.wikipedia.org/wiki/Reverse_proxy">reverse proxy</a>. While Starman deals specifically with those HTTP requests which require "application logic", all other requests (mostly static content, such as images or CSS) are dealt with by the proxy.</p> <h3><a>Configuring the Starman application server</a></h3> <p>Depending on the distribution, a startup method must be installed; this can be one of:</p> <ul> <li>SysV init script</li> <li>Upstart configuration</li> <li>Systemd configuration</li> </ul> <p>At the time of writing, the only configuration that comes with LedgerSMB's tarball is the systemd configuration. The following common setup is required regardless of the system used to manage services on the target system.</p> <p>To support priviledge separation, the Starman server should be running as a user which meets these criteria:</p> <ul> <li>Not the same user as the web server</li> <li>Does not have write access to the LedgerSMB directories</li> </ul> <p>To that extent, identify an existing (unused) system user, or create one with this command:</p> <p><code><strong># create 'ledgersmb' user for Starman server to run</strong><br /> $ useradd -d /non-existent -r -U -c "LedgerSMB/Starman service system user" ledgersmb</code></p> <h4><a>Configuring systemd for Starman</a></h4> <p>In the directory conf/systemd/ from the tarbal, there is a preconfigured systemd service file, which needs to be copied into place. In case you decided to install dependencies into a local::lib, the service file needs to be edited to set a PERL5LIB environment variable before you can succesfully start the service.</p> <p><code><strong># 'copy' systemd service configuration, enable and start</strong><br /> $ sed -e "s#WORKING_DIR#$PWD#" conf/systemd/ledgersmb_starman.service \<br /> | sudo tee /etc/systemd/system/ledgersmb-starman.service</code><br /> <code>$ systemctl enable ledgersmb-starman<br /> $ service ledgersmb-starman start</code></p> <p>Note that the above assumes that the commands are being run from the root of the unpacked tarball. It also assumes that the tarball has been unpacked at its installation path.</p> <p>To verify that the service started up correctly, run:</p> <p><code><strong># verify that the Starman/LedgerSMB server started correctly</strong><br /> $ journalctl -u ledgersmb-starman.service --since="today" -l -e</code></p> <h3><a>Configuring a reverse proxy</a></h3> <p>For a quick test-run or demo setup running on localhost only, configuration of a proxy isn't mandatory. However, for a production setup with LedgerSMB being network or even web-exposed, it's ill-advised to run without the reverse proxy for - at least - the following reasons:</p> <ul> <li>The proxy can serve static content [much] more efficiently (performance)</li> <li>The proxy can support HTTP/2 which multiplexes requests (performance)</li> <li>The proxy guards Starman against public exposure (security)</li> <li>The proxy adds TLS (security)</li> </ul> <p>With TLS certificates being completely free these days through <a href="https://letsencrypt.org/">Let's Encrypt</a>, and only a few dollars for the simplest of certificates from commercial vendors, there's really no reason <em>not</em> to secure traffic to the server. Further documentation below assumes you have such a certificate. As for getting Let's Encrypt certificates, use their <a href="https://letsencrypt.org/getting-started/">Getting Started guide</a>.</p> <p>For simplicity, only the configuration of nginx as a reverse proxy is documented here.</p> <h4><a>Configuring nginx</a></h4> <p>The tarball contains an example virtual host configuration file to set up a reverse proxy with nginx. It needs to be included in the 'http { }' block in your nginx configuration. On Debian derived systems, this is done by copying the file to /etc/nginx/sites-available/ledgersmb.conf. On RedHat/Fedora derivatives, the copying goes to /etc/nginx/conf.d/ledgersmb.conf. After editing the file, replacing the following variables:</p> <ul> <li><working_dir> Same replacement as before</working_dir><br /></li> <li>SSL_CERT_FILE<br /> Should be where your certificate file is stored; probably /etc/certs/your_host.example.com.pem</li> <li>SSL_KEY_FILE<br /> Probably the same as the SSL_CERT_FILE, but with '.key' extension</li> <li>YOUR_SERVER_NAME<br /> If nothing else, should be replaced by the output of the command 'hostname -f'</li> </ul> <p>NOTE: by default snakeoil certificates will be used by at least our nginx sample config files.<br /> These certificates are locally created and will normally require your browser clients to override something before they can be used.</p> <p>On Debian derivatives, activate this file after it has been edited, using:</p> <p><code><strong># On Debian/Ubuntu/Mint activate the virtual host</strong><br /> $ ln -s /etc/nginx/sites-available/ledgersmb.conf /etc/nginx/sites-enabled/</code></p> <p>On RedHat/Fedora derivatives, no symlinking is necessary: the configuration is active immediately. Now, verify that the configuration is acceptable:</p> <p><code><strong># (Re)start nginx service to make nginx reconfigure itself and validate configuration</strong><br /> $ service nginx restart</code></p> <h2><a>Configuring LedgerSMB</a></h2> <p>The tarball has a default LedgerSMB configuration file conf/ledgersmb.conf.default. Install the configuration file with:</p> <p><code><strong># Install the default ledgersmb.conf configuration file</strong><br /> $ cp conf/ledgersmb.conf.default ledgersmb.conf</code></p> <p>That is it.</p> <p>In case the in-app e-mail feature is going to be used, check the values in the [mail] section and optionally adjust for the mail setup of the target system.</p> <h2>Next steps</h2> <p>Now follow the instructions in the <a href="http://ledgersmb.org/topic/preparing/preparing-ledgersmb-15-first-use">"Prepare LedgerSMB for first use" guide</a>.</p> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>ehu</span></span> <span class="field field--name-created field--type-created field--label-hidden">Sat, 08/28/2021 - 07:47</span> <div class="field field--name-field-topic field--type-entity-reference field--label-above"> <div class="field__label">Topic</div> <div class="field__items"> <div class="field__item"><a href="/index.php/topic/installation" hreflang="en">Installation</a></div> </div> </div> <div class="field field--name-field-release field--type-entity-reference field--label-above"> <div class="field__label">Release</div> <div class="field__items"> <div class="field__item"><a href="/index.php/taxonomy/term/149" hreflang="en">1.9</a></div> </div> </div> <section class="field field--name-comment-node-article field--type-comment field--label-hidden comment-wrapper"> </section> Sat, 28 Aug 2021 14:47:46 +0000 ehu 553 at https://ledgersmb.org https://ledgersmb.org/index.php/content/installing-ledgersmb-19#comments Preparing LedgerSMB 1.8 for first use https://ledgersmb.org/index.php/content/preparing-ledgersmb-18-first-use <span class="field field--name-title field--type-string field--label-hidden">Preparing LedgerSMB 1.8 for first use</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>This page explains how to set up LedgerSMB's first company after having completed installation, e.g. through <a href="https://github.com/ledgersmb/ledgersmb-docker/tree/1.8">the docker-compose.yml file</a>. Please note that your full URL may differ depending on your installation method.</p> <p><!--break--></p> <p>In case you just completed the quick-start instructions, the base URL at which LedgerSMB is accessible is http://localhost:5762 (If you have a full production setup, you shouldn't need the port indicator [the ":5762" part]). There are two URLs (entry-points) you can use to access the application:</p> <ul> <li>/setup.pl [full URL: http://localhost:5762/setup.pl ]</li> <li>/login.pl [full URL: http://localhost:5762/login.pl ]</li> </ul> <p>The two entry points each serve their own purpose: setup.pl is the main tool for the database admin (lsmb_dbadmin); it serves to create new companies, create copies of companies, add users to companies and reset user's passwords. login.pl provides access to all other types of users.</p> <h2>Creating the first company</h2> <p>After browsing to setup.pl, the browser should show:</p> <p><img alt="Setup login screen" data-entity-type="file" data-entity-uuid="ffc108d2-45d2-45c2-ba18-854ff671d4f8" src="/sites/default/files/inline-images/2021-08-28_16-11.png" width="524" height="433" loading="lazy" /></p> <p>In case the screen only shows the "Database" field, this indicates problems with JavaScript not having loaded correctly. Fill out the fields as follows:</p> <ul> <li>Super-user login: <em>lsmb_dbadmin</em></li> <li>Password: <em>&lt;the password used in the installation&gt;</em></li> <li>Database: <em>testcompany</em></li> </ul> <p>Confirm the screen by clicking "Create". When the server is done creating the database for the company, a new screen will be returned. This can take up to 20 seconds.</p> <p>The resulting screen shows:</p> <p><img alt="Chart of account selection (step 1: country)" data-entity-type="file" data-entity-uuid="6058895e-544b-40d5-8f85-d7cb5eb42337" src="/sites/default/files/inline-images/2021-08-28_16-05.png" width="1913" height="339" loading="lazy" /></p> <p>Click "Skip" in order to skip loading a pre-defined Chart of Accounts. Select a country code and click Next to list the pre-defined charts of accounts.</p> <p>The resulting screen then shows a list of available Charts of Accounts:</p> <p><img alt="Chart of accounts selection step 2 (country-chart &amp; gifi selection)" data-entity-type="file" data-entity-uuid="c757cf81-86c6-453e-9950-5100ea5e9eb8" src="/sites/default/files/inline-images/setup_3_pre-defined_COA_2.png" width="1854" height="304" loading="lazy" /></p> <p>The screen above isn't shown when "Skip" was selected in the step before. Clicking "Skip" in this screen skips loading a pre-defined chart of accounts.</p> <p>Regardless of whether CoA loading was skipped or performed, the following screen will be presented:</p> <p><img alt="Selection of templates for printed documents (invoices, etc.)" data-entity-type="file" data-entity-uuid="dc315dcd-53bc-40f9-b6b8-b455f9400cc5" src="/sites/default/files/inline-images/setup_4_template_selection.png" width="1851" height="138" loading="lazy" /></p> <p>Select 'demo' templates for use with LaTeX; select 'xedemo' templates for use with XeLaTeX (which has better support for UTF-8 / accented characters and non-latin character sets). The exact choice made in this step is not highly important: templates can later be changed by loading new ones into the database. After confirming the selection by clicking "Load Templates", the following screen shows:</p> <p><img alt="Creation of the first user" data-entity-type="file" data-entity-uuid="626bb984-42ad-4352-9a4b-bfe909bfad14" src="/sites/default/files/inline-images/setup_5_create_user.png" width="1849" height="464" loading="lazy" /></p> <p>With this screen, the first user for this company gets created. There are two modes:</p> <ul> <li>Import (Yes): Assumes the username already exists in the database (e.g. because it is already used for another company; re-uses the existing username+password)</li> <li>Create (No): Assumes the username does <em>not</em> already exist; will create a new username</li> </ul> <p>The "Assign Permissions" selection determines the rights assigned to the user:</p> <ul> <li>"Full Permissions": The user may perform <em>any</em> task in the application</li> <li>"Manage Users": The user has just enough rights to create new users who have appropriate rights</li> </ul> <p>For the purpose of this quick-start guide, enter the following details:</p> <ul> <li>Username: <em><strong>first_user</strong></em></li> <li>Password: <em><strong>first_user</strong></em></li> <li>Import: <em><strong>No</strong></em></li> <li>Salutation: <em><strong>Mr</strong></em></li> <li>First Name: <em><strong>First</strong></em></li> <li>Last Name: <em><strong>User</strong></em></li> <li>Employee Number: <em><strong>1</strong></em></li> <li>Date of Birth: <em>(today's date)</em></li> <li>Tax ID/SSN: <strong><em>1</em></strong></li> <li>Country: <em>(your country)</em></li> <li>Assign Permissions: <em><strong>Full Permissions</strong></em></li> </ul> <p>After confirming these data by clicking the "Create User" button, the following screen shows:</p> <h2><img alt="Confirmation of database creation (completed)" data-entity-type="file" data-entity-uuid="b9e9a07e-f9e7-4676-b8d2-b0a416e2b0e2" src="/sites/default/files/inline-images/setup_6_database_operation_complete.png" width="1852" height="535" loading="lazy" />First user login</h2> <p>The "Start Using LedgerSMB" link opens the main application login screen, which can be used to log in using the initial user created above:</p> <p><img alt="Application login" data-entity-type="file" data-entity-uuid="54f62c59-fec9-43d6-bd90-c49ba68f3029" src="/sites/default/files/inline-images/2021-08-28_16-09_0.png" width="369" height="401" loading="lazy" /></p> <p>Confirming login results in the following page*:</p> <p><img alt="Initial application screen" data-entity-type="file" data-entity-uuid="780a4257-2ecb-452b-80ff-e1c0b9ee8cc8" src="/sites/default/files/inline-images/2021-08-28_16-10.png" width="802" height="437" loading="lazy" /></p> <p>* Note that the picture shows company name "test10", but when succinctly following the instructions, it should show "testcompany".</p> <h2>Database administration of first company</h2> <p>Once the <em>testcompany</em> has been created, it can be logged into through setup.pl as well as through login.pl. When logging in through setup.pl, the following screen with database administration functions shows:</p> <h2><img alt="Database management console (setup.pl)" data-entity-type="file" data-entity-uuid="bc493bce-122b-4982-bd14-83912ed73143" src="/sites/default/files/inline-images/setup_9_database_administration.png" width="1862" height="557" loading="lazy" />What's next?</h2> <p>The system is now set up for evaluation and testing. The project has multiple channels to contact other users or the developers. Read all about that on the <a href="http://ledgersmb.org/project-resources">community project resources</a> page.</p> <p>Any comments as to this specific article? Please <a href="http://ledgersmb.org/user/register">sign up</a> to the site and leave your comments below!</p> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>ehu</span></span> <span class="field field--name-created field--type-created field--label-hidden">Mon, 06/01/2020 - 00:46</span> <div class="field field--name-field-release field--type-entity-reference field--label-above"> <div class="field__label">Release</div> <div class="field__items"> <div class="field__item"><a href="/index.php/taxonomy/term/147" hreflang="en">1.8</a></div> </div> </div> <section class="field field--name-comment-node-article field--type-comment field--label-hidden comment-wrapper"> </section> Mon, 01 Jun 2020 07:46:46 +0000 ehu 471 at https://ledgersmb.org https://ledgersmb.org/index.php/content/preparing-ledgersmb-18-first-use#comments Preparing LedgerSMB 1.9 for first use https://ledgersmb.org/index.php/content/preparing-ledgersmb-19-first-use <span class="field field--name-title field--type-string field--label-hidden">Preparing LedgerSMB 1.9 for first use</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p><span id="cke_bm_103S" style="display: none;"> </span> </p> <p>This page explains how to set up LedgerSMB's first company after having completed installation, e.g. through <a href="https://github.com/ledgersmb/ledgersmb-docker/tree/1.9">the docker-compose.yml file</a>. Please note that your full URL may differ depending on your installation method.</p> <p><!--break--></p> <p>In case you just completed the quick-start instructions, the base URL at which LedgerSMB is accessible is http://localhost:5762 (If you have a full production setup, you shouldn't need the port indicator [the ":5762" part]). There are two URLs (entry-points) you can use to access the application:</p> <ul> <li>/setup.pl [full URL: http://localhost:5762/setup.pl ]</li> <li>/login.pl [full URL: http://localhost:5762/login.pl ]</li> </ul> <p>The two entry points each serve their own purpose: setup.pl is the main tool for the database admin (lsmb_dbadmin); it serves to create new companies, create copies of companies, add users to companies and reset user's passwords. login.pl provides access to all other types of users.</p> <h2>Creating the first company</h2> <p>After browsing to setup.pl, the browser should show:</p> <p><img alt="Setup login screen" data-entity-type="file" data-entity-uuid="8e63bc73-d413-42b4-a37a-1dcc2ec9caaf" src="/sites/default/files/inline-images/2021-08-28_16-16.png" width="572" height="410" loading="lazy" /></p> <p>In case the screen only shows the "Database" field, this indicates problems with JavaScript not having loaded correctly. Fill out the fields as follows:</p> <ul> <li>Super-user login: <em>lsmb_dbadmin</em></li> <li>Password: <em>&lt;the password used in the installation&gt;</em></li> <li>Database: <em>testcompany</em></li> </ul> <p>Confirm the screen by clicking "Create". When the server is done creating the database for the company, a new screen will be returned. This can take up to 20 seconds.</p> <p>The resulting screen shows:</p> <p><img alt="Chart of account selection (step 1: country)" data-entity-type="file" data-entity-uuid="075f0173-f7a4-4897-ae05-1e7e47748fa1" src="/sites/default/files/inline-images/2021-08-28_16-17.png" width="1895" height="362" loading="lazy" />Click "Skip" in order to skip loading a pre-defined Chart of Accounts. Select a country code and click Next to list the pre-defined charts of accounts.</p> <p>The resulting screen then shows a list of available Charts of Accounts:</p> <p><img alt="Chart of accounts selection step 2 (country-chart &amp; gifi selection)" data-entity-type="file" data-entity-uuid="336440d8-6bfe-457f-8bc2-8ad9ccf76350" src="/sites/default/files/inline-images/2021-08-28_16-18.png" width="1906" height="329" loading="lazy" /></p> <p>The screen above isn't shown when "Skip" was selected in the step before. Clicking "Skip" in this screen skips loading a pre-defined chart of accounts.</p> <p>Regardless of whether CoA loading was skipped or performed, the following screen will be presented:</p> <p><img alt="Selection of templates for printed documents (invoices, etc.)" data-entity-type="file" data-entity-uuid="15150b01-2bed-4c48-9e82-f9a4e4162607" src="/sites/default/files/inline-images/2021-08-28_16-19.png" width="1920" height="217" loading="lazy" /></p> <p>Select 'demo' templates for use with LaTeX; select 'xedemo' templates for use with XeLaTeX (which has better support for UTF-8 / accented characters and non-latin character sets). The exact choice made in this step is not highly important: templates can later be changed by loading new ones into the database. After confirming the selection by clicking "Load Templates", the following screen shows:</p> <p><img alt="Creation of the first user" data-entity-type="file" data-entity-uuid="0c9f2c6f-b492-4c79-9fc5-c62ece65b660" src="/sites/default/files/inline-images/2021-08-28_16-20.png" width="1920" height="464" loading="lazy" /></p> <p>With this screen, the first user for this company gets created. There are two modes:</p> <ul> <li>Import (Yes): Assumes the username already exists in the database (e.g. because it is already used for another company; re-uses the existing username+password)</li> <li>Create (No): Assumes the username does <em>not</em> already exist; will create a new username</li> </ul> <p>The "Assign Permissions" selection determines the rights assigned to the user:</p> <ul> <li>"Full Permissions": The user may perform <em>any</em> task in the application</li> <li>"Manage Users": The user has just enough rights to create new users who have appropriate rights</li> </ul> <p>For the purpose of this quick-start guide, enter the following details:</p> <ul> <li>Username: <em><strong>first_user</strong></em></li> <li>Password: <em><strong>first_user</strong></em></li> <li>Import: <em><strong>No</strong></em></li> <li>Salutation: <em><strong>Mr</strong></em></li> <li>First Name: <em><strong>First</strong></em></li> <li>Last Name: <em><strong>User</strong></em></li> <li>Employee Number: <em><strong>1</strong></em></li> <li>Date of Birth: <em>(today's date)</em></li> <li>Tax ID/SSN: <strong><em>1</em></strong></li> <li>Country: <em>(your country)</em></li> <li>Assign Permissions: <em><strong>Full Permissions</strong></em></li> </ul> <p>After confirming these data by clicking the "Create User" button, the following screen shows:</p> <h2><img alt="Confirmation of database creation (completed)" data-entity-type="file" data-entity-uuid="926c3ddb-36a2-4ab5-b313-27f71694e029" src="/sites/default/files/inline-images/2021-08-28_16-21.png" width="1920" height="539" loading="lazy" />First user login</h2> <p>The "Start Using LedgerSMB" link opens the main application login screen, which can be used to log in using the initial user created above:</p> <p><img alt="Application login" data-entity-type="file" data-entity-uuid="96a23e98-69eb-4c02-bbaa-53bbbb4b998c" src="/sites/default/files/inline-images/2021-08-28_16-22.png" width="410" height="478" loading="lazy" /></p> <p>Confirming login results in the following page*:</p> <p><img alt="Initial application screen" data-entity-type="file" data-entity-uuid="3ae71dd8-b11d-4f38-9103-87308d00f041" src="/sites/default/files/inline-images/2021-08-28_16-22_1.png" width="815" height="448" loading="lazy" /></p> <p>* Note that the picture shows company name "test", but when succinctly following the instructions, it should show "testcompany".</p> <h2>Database administration of first company</h2> <p>Once the <em>testcompany</em> has been created, it can be logged into through setup.pl as well as through login.pl. When logging in through setup.pl, the following screen with database administration functions shows:</p> <h2><img alt="Database management console (setup.pl)" data-entity-type="file" data-entity-uuid="645310e2-cba5-4e3c-9e4c-8bdeee55d85d" src="/sites/default/files/inline-images/2021-08-28_16-23.png" width="1182" height="544" loading="lazy" />What's next?</h2> <p>The system is now set up for evaluation and testing. The project has multiple channels to contact other users or the developers. Read all about that on the <a href="http://ledgersmb.org/project-resources">community project resources</a> page.</p> <p>Any comments as to this specific article? Please <a href="http://ledgersmb.org/user/register">sign up</a> to the site and leave your comments below!</p> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>ehu</span></span> <span class="field field--name-created field--type-created field--label-hidden">Sat, 08/28/2021 - 06:59</span> <div class="field field--name-field-topic field--type-entity-reference field--label-above"> <div class="field__label">Topic</div> <div class="field__items"> <div class="field__item"><a href="/index.php/taxonomy/term/148" hreflang="en">Draft</a></div> </div> </div> <div class="field field--name-field-release field--type-entity-reference field--label-above"> <div class="field__label">Release</div> <div class="field__items"> <div class="field__item"><a href="/index.php/taxonomy/term/149" hreflang="en">1.9</a></div> </div> </div> <section class="field field--name-comment-node-article field--type-comment field--label-hidden comment-wrapper"> </section> Sat, 28 Aug 2021 13:59:38 +0000 ehu 552 at https://ledgersmb.org https://ledgersmb.org/index.php/content/preparing-ledgersmb-19-first-use#comments Architecture Approach (2010) https://ledgersmb.org/index.php/content/architecture-approach-2010 <span class="field field--name-title field--type-string field--label-hidden">Architecture Approach (2010)</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><h2>1: Base Architecture Goals</h2> <p>The new architecture is designed to solve the following problems with the current codebase:</p> <p>A) <strong>Maintenance difficulty</strong>. The current codebase is quite unstructured and difficult to maintain. 1.2.x has already been a bit of a mess due to the issues of fixing something one place and having it break something else.</p> <p>B) <strong>Interoperability difficulty</strong>. In 1.2.x interoperating with the codebase requires very brittle and opaque interfaces. We need to change this to allow for add-ons in different languages using a number of stable methods.</p> <p>C) <strong>Ease of customization</strong>. Many vertical solutions require customizations to work effectively. The current software is not easy to customize. 1.3.x makes some progress in this area but more work is needed.</p> <h2>2: Current Approach</h2> <p>We are refactoring the code along the lines of an MVC architecture. This architecture, however, is slightly different than other MVC implementations and hence we have decided not to use any framework and simply refactor code as appropriate.</p> <p>A) <strong>Model</strong>: Unlike most MVC implementations, the model will be defined as much as possible in the database and methods will be implemented in stored procedures. A lightweight Perl wrapper will exist to allow us to dynamically discover these methods. Essentially, the ORM will be defined in the db.</p> <p>Currently we require an explicit mapping between object methods and database stored procedures. We may replace this with something like Module::Compile down the road.</p> <p>The in-db ORM will allow the entire data model of the application to be accessible to other components possibly written in other languages. Other implementations of the entire web software could easily be written in arbitrary languages (Java and Python have both been discussed), as well as add-on components.</p> <p>B) <strong>View</strong>: The current approach to the is to support a non-default subset of Template Toolkit which is in line with XML, SGML, and HTML standards. This should allow for easier access to the templates in other languages due to our use of PI tags. More mature areas may be moved over to XSLT-based templates based on XML representation.</p> <p>The second point of interoperability will also be through a view component: those of RESTful web services. Many or all objects in the system will have XML representations and these can be accessed using standard HTTP operations (GET, PUT, POST, etc).</p> <p>C) <strong>Controller</strong>: The controller components will be light-weight workflow scripts automating the interaction of the user with the view and model components.</p> <h2>3: Stored Procedure Conventions</h2> <p>Stored procedures will be named according to the following convention of class_method (all lower case).</p> <p>Stored procedures may use named arguments corresponding to object properties. Because PostgreSQL does not allow for arguments to have the same names as columns used, all named IN variables will be prefaced with in_. The model wrapper will discover these names, strip the prefix, and match with appropriate properties.</p> <h2>4: Why not use a framework like Catalyst?</h2> <p>Most MVC frameworks assume that the MVC components are broken down along specific lines which are not condusive to our goals. In particular the ORM layers do not work well with our approach.</p> <p>In general, the consensus has been that these frameworks are the wrong tool for the job, that they add needless complexity, and that using them would create pressure to abandon our architecutral goals in favor of a single-language solution. In short, we have yet to be convinced that the added complexity would be worth it.</p> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>Anonymous (not verified)</span></span> <span class="field field--name-created field--type-created field--label-hidden">Sat, 02/20/2010 - 13:21</span> <div class="field field--name-field-topic field--type-entity-reference field--label-above"> <div class="field__label">Topic</div> <div class="field__items"> <div class="field__item"><a href="/index.php/topic/developer" hreflang="en">Developer</a></div> </div> </div> <section class="field field--name-comment-node-article field--type-comment field--label-hidden comment-wrapper"> </section> Sat, 20 Feb 2010 21:21:03 +0000 Anonymous 24 at https://ledgersmb.org https://ledgersmb.org/index.php/content/architecture-approach-2010#comments Download https://ledgersmb.org/index.php/content/download <span class="field field--name-title field--type-string field--label-hidden">Download</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><h1>Maintained releases</h1> <p>The current stable release line is 1.8. For more information about older versions, see <a href="http://ledgersmb.org/faq/support/which-versions-do-you-support">the FAQ item about supported releases</a>. Versions 1.2 and older should no longer be used due to known security issues that cannot be resolved in that code base.</p> <h1>Official release distribution</h1> <div data-embed-button="file_browser" data-entity-embed-display="image:image" data-entity-type="file" data-entity-uuid="db4ffe70-23c4-48ef-8c9f-0405eb494751" class="align-left embedded-entity" data-langcode="und"> <img src="/sites/default/files/lsmb_0%20%281%29.jpg" /> </div> <p> The latest <strong>official release</strong> of LedgerSMB is always at <a href="http://download.ledgersmb.org/f/">download site</a>. Releases are signed with GPG to assert integrity. Our public GPG key can be found on <a href="http://pgp.mit.edu:11371/pks/lookup?op=get&amp;search=0x39A629558DA0AF10">MIT's key server</a> or on <a href="http://pgpkeys.eu/pks/lookup?op=get&amp;search=0x39A629558DA0AF10">pgpkeys.eu</a>. <a href="https://ledgersmb.org/content/installing-ledgersmb-15">Install  </a>and <a href="https://ledgersmb.org/content/upgrading-ledgersmb-15">upgrade</a> info.</p> <p>You can verify the release with the command</p> <div class="geshifilter"><pre class="bash geshifilter-bash"><span class="co4">$ </span>gpg <span class="re5">--verify</span> ledgersmb-<span class="sy0">&lt;</span>version<span class="sy0">&gt;</span>.tar.gz.asc ledgersmb-<span class="sy0">&lt;</span>version<span class="sy0">&gt;</span>.tar.gz</pre></div> <h1>Docker images</h1> <p><img alt="Docker logo" data-entity-type="file" data-entity-uuid="fb9cc1b3-c021-4959-9ae7-8f6b4253a098" height="77" src="/sites/default/files/inline-images/small_v-trans_0.png" width="87" loading="lazy" class="align-left" />There are production level <a href="https://docs.docker.com/">Docker</a> images <a href="https://hub.docker.com/r/ledgersmb/ledgersmb/">available on the Docker hub</a>. New containers are released on every stable (1.8) and old-stable release. Newer releases have acceptable sizes (~ 175MB).</p> <p>The docker repository identifier is "ledgersmb/ledgersmb" with the "latest" tag always pointing to the most recent stable release, which is currently the most recent 1.8.x release. The "master" tag points to the most recent alpha or beta of the development version (1.9).</p> <h1>Distribution packages</h1> <div data-embed-button="file_browser" data-entity-embed-display="image:image" data-entity-type="file" data-entity-uuid="1d5cf6f4-3ed1-4df8-a1e4-309812de8639" class="align-left embedded-entity" data-langcode="und"> <img src="/sites/default/files/openlogo-nd-25_1.png" /> </div> <p> A <strong>Debian</strong> package is available in Debian v10 (stable, 'buster') but was <em>not</em> available in Debian v9 (Stretch, oldstable) due to problems with the Dojo dependency (which failed to build). Packages <em>are</em> available for jessie (oldoldstable), jessie-backports, wheezy, the current Debian Testing (bullseye), and the current Debian Unstable (Sid).  Note that the current LedgerSMB version that is recommended for use is one in the 1.6.x series, which in Debian are available in stable, testing, or Unstable.</p> <p>Newer packages than those distributed by Debian can be found in the <a href="https://apt.ledgersmb.org/">LedgerSMB APT</a> repository (along with their updated dependancies as necessary).</p> <div data-embed-button="file_browser" data-entity-embed-display="image:image" data-entity-type="file" data-entity-uuid="667831a5-e5bd-4c88-b4f4-a7888392a414" class="align-left embedded-entity" data-langcode="und"> <img src="/sites/default/files/ubuntu_0_1.png" /> </div> <p><strong> Ubuntu</strong> packages are available in the standard distributions as of  Xenial (16.04 LTS), Bionic (18.04), Disco (19.04) as well as the current development release (Eoan) .</p> <p>Newer packages than those distributed in Ubuntu can be found in the <a href="https://launchpad.net/~ledgersmb/+archive/ubuntu/main/+packages">LedgerSMB PPA</a><a href="https://repo.ledgersmb.org/"> </a>repository for Xenial (16.04 LTS) and others as necessary or requested (along with their updated dependancies as necessary).</p> <div data-embed-button="file_browser" data-entity-embed-display="image:image" data-entity-type="file" data-entity-uuid="83035d31-c255-4445-9a55-855637a29250" class="align-left embedded-entity" data-langcode="und"> <img src="/sites/default/files/rpm_logo1_0.png" /> </div> <p> <strong>RPM</strong> Packaging contributions solicited.</p> <div data-embed-button="file_browser" data-entity-embed-display="image:image" data-entity-type="file" data-entity-uuid="03989031-93cc-478e-bde5-816a93069d95" class="align-left embedded-entity" data-langcode="und"> <img src="/sites/default/files/freebsd_0.png" /> </div> <p><strong>FreeBSD</strong> Packaging contributions solicited</p> <div data-embed-button="file_browser" data-entity-embed-display="image:image" data-entity-type="file" data-entity-uuid="c371efe2-7772-4c1a-9600-76c376e8ba47" class="align-left embedded-entity" data-langcode="und"> <img src="/sites/default/files/ppuf_0_0.png" /> </div> <p> <strong>OpenBSD</strong> Packaging contributions solicited.</p> <div data-embed-button="file_browser" data-entity-embed-display="image:image" data-entity-type="file" data-entity-uuid="106c6ca2-81f6-4434-b470-75da3589fb42" class="align-left embedded-entity" data-langcode="und"> <img src="/sites/default/files/Virtualbox_logo_0.png" /> </div> <p><strong> Virtual Box</strong> No up-to-date images at this time.<contribute one=""></contribute></p> <h1>Keeping up with the latest developments</h1> <p>The latest 1.6.x, 1.7.x and 1.8.x are available directly from <strong>GitHub</strong> as a .zip file (it's not an official release, but has the latest fixes you may need) <a href="https://github.com/ledgersmb/LedgerSMB/archive/1.6.zip">1.6.x from GitHub</a>, <a href="https://github.com/ledgersmb/LedgerSMB/archive/1.7.zip">1.7.x from GitHub</a>, <a href="https://github.com/ledgersmb/LedgerSMB/archive/1.8.zip">1.8.x from GitHub</a>. Check the repository for the change log in <a href="https://github.com/ledgersmb/LedgerSMB/blob/1.8/Changelog">1.8.x from GitHub</a> or <a href="https://github.com/ledgersmb/LedgerSMB/blob/master/Changelog">the changes in bleeding edge ('master')</a>.</p> <p><strong>LedgerSMB public GPG key</strong><br /> The LedgerSMB GPG public key can be found on the<a href="http://pgp.mit.edu/"> MIT key server.</a>  Here is the <a href="http://pgp.mit.edu:11371/pks/lookup?op=get&amp;search=0x39A629558DA0AF10">direct link</a>.</p> <div id="cke_pastebin" style="position: absolute; top: 508.8px; width: 1px; height: 1px; overflow: hidden; left: -1000px;"> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>Anonymous (not verified)</span></span> <span class="field field--name-created field--type-created field--label-hidden">Sat, 04/01/2017 - 05:28</span> <div class="field field--name-field-topic field--type-entity-reference field--label-above"> <div class="field__label">Topic</div> <div class="field__items"> <div class="field__item"><a href="/index.php/topic/installation" hreflang="en">Installation</a></div> </div> </div> <div class="field field--name-field-operating-system field--type-entity-reference field--label-above"> <div class="field__label">Operating system</div> <div class="field__items"> <div class="field__item"><a href="/index.php/operating-system/windows" hreflang="en">Windows</a></div> <div class="field__item"><a href="/index.php/operating-system/other" hreflang="en">Other</a></div> <div class="field__item"><a href="/index.php/operating-system/ios" hreflang="en">iOS</a></div> <div class="field__item"><a href="/index.php/operating-system/freebsd" hreflang="en">FreeBSD</a></div> <div class="field__item"><a href="/index.php/operating-system/linux" hreflang="en">Linux</a></div> <div class="field__item"><a href="/index.php/operating-system/centos" hreflang="en">CentOS</a></div> <div class="field__item"><a href="/index.php/operating-system/debian" hreflang="en">Debian</a></div> <div class="field__item"><a href="/index.php/operating-system/fedora" hreflang="en">Fedora</a></div> <div class="field__item"><a href="/index.php/operating-system/linux/gentoo" hreflang="en">Gentoo</a></div> <div class="field__item"><a href="/index.php/operating-system/redhat-enterprise-linux" hreflang="en">RedHat Enterprise Linux</a></div> <div class="field__item"><a href="/index.php/operating-system/linux/ubuntu" hreflang="en">Ubuntu</a></div> <div class="field__item"><a href="/index.php/operating-system/macos-x" hreflang="en">MacOS X</a></div> <div class="field__item"><a href="/index.php/operating-system/openbsd" hreflang="en">OpenBSD</a></div> <div class="field__item"><a href="/index.php/operating-system/android" hreflang="en">Android</a></div> </div> </div> <section class="field field--name-comment-node-page field--type-comment field--label-hidden comment-wrapper"> </section> Sat, 01 Apr 2017 12:28:25 +0000 Anonymous 140 at https://ledgersmb.org https://ledgersmb.org/index.php/content/download#comments Community overview 2020 https://ledgersmb.org/index.php/content/community-overview-2020 <span class="field field--name-title field--type-string field--label-hidden">Community overview 2020</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>As the year-end approaches, it's time to provide an overview of what our community has achieved over the past year. At the end of last year, I wished everybody a healthy and prosperous 2020. The year has turned out to be a big challenge and I hope this overview reaches you in a health as good as (or better than) last year's.</p> <p>Where many open source communities seem to have been negatively affected by the circumstances this year, core project seems to have held up very well and actually done better than last year.</p> <h1>== Community interest ==</h1> <p>Although the number of hits on the website has declined steadily over the years, we're seeing the bounce rate decline (steadily) as well, in combination with an increase in the average time spent on the site and the average number of actions on the site. It seems our site increases in relevance to the visitors which we are getting. In prior years I wrote how a decrease in website traffic might not be an indication of loss of interest as more and more users are converting to mobile web-experiences.<br /> Traffic on the mailing lists was also very low this year. From the fact that during the year, we've also seen the number of Stars and Forks on GitHub slowly but steadily increase (Stars went up from 158 in February to 207 today), we can conclude that there is still interest in the project, however, the broader community didn't have much time to engage with the project this year -- as other volunteer-driven projects are experiencing this year.</p> <h1>== Releases ==</h1> <p>With the release of 1.8.0  on 4 September 4 2020, we realized our goal to release 1.8 in the second half of the year, around a year after 1.7. We were even able to reduce the release cycle below 1 year! This way, our target of releasing around the middle of the year, in order for the software to mature well before year-end (when most companies close their books).<br /> Despite the short release cycle, we were able to include a sizeable list of new functionalities, changes and (code) cleanups through 786 files changed, 149056 added lines and 153741 removed lines of code (and comments) between 1.7.0 and 1.8.0.</p> <p>This year we released almost double the number of releases as we did in 2019 and 2018: where we delivered around 20 releases in both prior years, this year we delivered:<br />   1.6 (11): 1.6.18 - 1.6.28<br />   1.7 (19): 1.7.7 - 1.7.25<br />   1.8 (14): 1.8.0-rc1 1.8.0 - 1.8.8 (including pre-releases: 1.8.0-alpha1 1.8.0-beta1 - 1.8.0-beta3)<br /> 44 releases!</p> <h1>== Packaging and installation ==</h1> <p>With the 1.8 release, we were able to move the Docker images to Debian Buster! Moving the Docker image to Buster in 2019 with the 1.7 release was unsuccessful due to dropped support for ssmtp in Debian and lack for replacement functionality and lack of support for some of the ssmtp functionality in LedgerSMB itself. In 1.8, we added extensive support for the configuration of outgoing e-mail to LedgerSMB, allowing for this transition.</p> <p>The Debian ledgersmb package for 1.6 transitioned to Buster last year and we were very happy about that, but at the same time we found breakage in the package. We hoped to fix that soon after discovery. That turned out quite differently: as it happens, we had to come to the conclusion that we lost contact with Robert James Clay (aka Jame) with last known contact around October 2019. He used to maintain the Debian packages for us, including many of our dependencies which hadn't been packaged for Debian before. Unfortunately, LedgerSMB 1.6 has now been dropped from  Debian Testing due to problems with dependencies and no newer versions have been packaged. We hope that Jame is doing fine and in the mean time would welcome anybody who wants to take over (Debian) packaging.</p> <h1>== Development progress ==</h1> <p>This year we had a lot of development activity as demonstrated by the size of the 1.8.0 release and the number of patch releases for our active maintenance branches. The number of active developers - judging by accepted commits - went up from 4 last year to 7 people contributing commits this year, generating some 800 pull requests on GitHub:</p> <p>Project commits on all branches (excluding merges):<br />    1247 Erik Huelsmann*<br />     179 Yves Lavoie*<br />     108 Nick Prater*<br />      37 Aung Zaw Win*<br />       3 Håvard Sørli<br />       1 Bobberty<br />       1 Andreas Karlsson<br /> * includes contributions on maintenance branches</p> <p>By comparison, these are the figures for 2019:<br />     640 Erik Huelsmann<br />      26 Yves Lavoie<br />      21 Nick Prater<br />       1 David Godfrey</p> <p>Please note that these numbers don't include the time spent by those taking the effort to report their problems with the software and taking the time to respond to developer questions as well as helping to test solutions when developers think they solved the problem. Similarly, there was a lot of activity with respect to issues:</p> <p>  Number of open issues at 2020-01-01: 339<br />     of which remain open today: 180</p> <p>  Issues closed since 2020-01-01: 278<br />     of which created before 2020-01-01: 159</p> <p>  Issues created since 2020-01-01: 161<br />     of which still open: 42</p> <p>  Number of open issues today: 222</p> <p>This amount of development activity triggers many CI/CD jobs. Last year, we had just moved our coverage testing loads from TravisCI to CircleCI due to the fact that our coverage testing loads were taking too long to complete within the TravisCI limits. This year, unfortunately, we're moving our regular CI/CD loads from TravisCI to GitHub Actions: TravisCI has seriously restricted (effectively dropped) support for Open Source work loads. Even though we now have effectively moved off TravisCI, I'd like to take the opportunity to publicly thank them for all the builds that they were able to donate to this project over the course of years: our project ran almost 10.200 builds and my own account ran roughly 5.700 additional builds in preparation for merges! TravisCI, thank you!<br /> With everything going on, we were able to improve our test coverage to 44% (from 41 last year), but unfortunately, that's not nearly as much as in the year before (34 -&gt; 41).</p> <p>In the Changelog for 1.9 (https://github.com/ledgersmb/LedgerSMB/blob/master/Changelog#L3), you'll be able to read where we spent our time, for all effort that didn't end up in 1.8 and wasn't listed above. Areas that we're currently spending time on, include:</p> <ul> <li>Selection of a new translation engine which supports more than 2 plural forms</li> <li>Gradual polishing of 1.8 through regular fixes of issues left to be polished after 1.8.0 release</li> <li>A Perl and PostgreSQL API to form a foundation to build a Web API and command line application on</li> <li>Improvements in our <em>javascript</em> handling to support a switch to Vue</li> </ul> <p>The 222 issues that are open today summarize into these statistics:</p> <ul> <li>15 bite-sized: a good place to start when looking to make contributions</li> <li>33 needs-design: waiting in our design queue to be handled</li> <li>125 enhancement: requesting new features added to the application</li> <li>12 waiting-for-user: can't proceed on these without further reporter input</li> </ul> <p>(Note that an issue may fall into more than one category or none at all.)</p> <p>== New functionality and improvements ==</p> <p>In 1.9, <em>javascript</em> code will be built with Webpack: the standard for <em>javascript</em> delivery. This allows us to add static code analysis as well as lots of code transforms customary in the <em>javascript</em> world. Basically it makes our <em>javascript</em> delivery more "as any JS project would do it". Yves sank immense amounts of time into trying to realize this change, wrestled and came out a winner! Thanks Yves.<br /> Another change that isn't highly visible, but should be noticeable is that we worked on improving the page response times. We were able to eliminate a lot of overhead (in miliseconds) from our page generation.</p> <p>Another topic that we spent a lot of time on is the consistency and validity of the example Charts of Accounts delivered with LedgerSMB: by changing the storage format from SQL code to XML structured data and formulating consistency rules for the XML data set, we were able to establish consistency and resolve consistency issues. Through this effort new users trying other Charts of Accounts than the US or CA charts that the developers usually use, should have a much better first user impression.</p> <h1>== Looking forward to 2021 ==</h1> <p>In 2021, we'll likely release 1.9 around the middle of the year; again in a release cycle a bit shorter than a year. Fortunately at 10 June 2021, 1.6 will reach end-of-life which means that over the first half of the year, supported maintenance branches will be 1.8-1.7-1.6 while over the second half of the year it will be 1.9-1.8-1.7. Experience this year has shown that while maintaining 3 branches is challenging (especially with the rate of change we're currently going through), it is doable. However, running more than 3 maintenance branches in parallel won't be manageable. This is one of the reasons why we decided that the 1.8 and later branches receive 2 years instead of 3 years community maintenance support. Another reason being that upgrades have become a lot less painful over the past years (or so our users have told us).</p> <p>For 2021, I hope that the project can resolve a series of long-standing open issues as well as finally completing (and expanding on) the foundation for APIs at every level of the application: database, Perl, Web and (command line) application. Next to that, I hope that we can significantly increase our test coverage just like last year (and unlike this one) as well as cleaning (removing) old/deprecated code. All of that obviously in the expectation that it will result in an attractive 1.9 release!</p> <p>And last but not least, I'm hoping for 1 or 2 new contributors (not necessarily developers; translators, testers, documenters or UI artists are all greatly appreciated!). If you want to contribute, but don't know where to start, please contact me.</p> <h1>== In closing ==</h1> <p>Thanks to everybody who contributed to any of the above in any way, especially to</p> <ul> <li>those who offered me or one of the other developers private access to their data to help get their problems resolved. This way, we were able to resolve a series of COGS related corner cases which I would not have been able to reproduce -- saving me huge amounts of time.</li> <li>Computerisms.ca for hosting our DNS</li> <li>Freelock.com for hosting our website and mailing lists</li> <li>Efficito.com for hosting our mailing list archive, apt repository, release and download server</li> <li>GitHub.com, TravisCI, CircleCI and coveralls.io for hosting our development workflow</li> </ul> <p>My special personal thanks go to my GitHub Sponsors for supporting me for time, efforts and (financial) resources dedicated to the project!</p> <p><br /> Leaves me only to wish everybody in our community - and their loved ones - happy holidays and a safe and highly improved (over 2020) 2021!</p> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>ehu</span></span> <span class="field field--name-created field--type-created field--label-hidden">Tue, 12/22/2020 - 13:03</span> <div class="field field--name-field-topic field--type-entity-reference field--label-above"> <div class="field__label">Topic</div> <div class="field__items"> <div class="field__item"><a href="/index.php/taxonomy/term/144" hreflang="en">Year overview</a></div> <div class="field__item"><a href="/index.php/topics/community" hreflang="en">Community</a></div> </div> </div> <section class="field field--name-comment-node-article field--type-comment field--label-hidden comment-wrapper"> </section> Tue, 22 Dec 2020 21:03:57 +0000 ehu 506 at https://ledgersmb.org https://ledgersmb.org/index.php/content/community-overview-2020#comments