# CKAN installation
sudo apt update
sudo apt install -y libpq5 redis-server nginx supervisor
wget https://packaging.ckan.org/python-ckan_2.10-jammy_amd64.deb
sudo dpkg -i python-ckan_2.10-jammy_amd64.deb
sudo apt install -y postgresql
sudo -u postgres psql -l
sudo -u postgres createuser -S -D -R -P ckan_default
password: FFB@q3Op64
sudo -u postgres createdb -O ckan_default ckan_default -E utf-8
sudo snap install docker
docker run --name ckan-solr -p 8983:8983 -d ckan/ckan-solr:2.10
sudo apt install x11-apps
sudo mkdir -p /var/lib/ckan/default
sudo chown www-data /var/lib/ckan/default
sudo chmod u+rwx /var/lib/ckan/default
Set the IP address in /etc/ckan/default/ckan.ini
ckan.site_url = http://158.39.201.32
sqlalchemy.url = postgresql://ckan_default:FFB@q3Op64@localhost/ckan_default
sudo ckan db init
sudo supervisorctl reload
sudo supervisorctl status
sudo service nginx restart
Installation if successful is available at http://158.39.201.32
https://docs.ckan.org/en/2.10/maintaining/getting-started.html
. /usr/lib/ckan/default/bin/activate
cd /usr/lib/ckan/default/src/ckan
Create sysadmin annefou
ckan -c /etc/ckan/default/ckan.ini sysadmin add annefou email=annefou@localhost name=annefou
T..af
ckan -c /etc/ckan/default/ckan.ini sysadmin --help
### Creating test data
pip install -r dev-requirements.txt
sudo ckan -c /etc/ckan/default/ckan.ini generate fake-data organization
2023-09-28 19:09:23,103 INFO [ckan.cli] Using configuration file /etc/ckan/default/ckan.ini
2023-09-28 19:09:23,103 INFO [ckan.config.environment] Loading static files from public
2023-09-28 19:09:23,316 INFO [ckan.config.environment] Loading templates from /usr/lib/ckan/default/src/ckan/ckan/templates
2023-09-28 19:09:23,748 INFO [ckan.config.environment] Loading templates from /usr/lib/ckan/default/src/ckan/ckan/templates
2023-09-28 19:09:23,970 WARNI [ckan.config.middleware.flask_app] Extensions are excluded from CSRF protection! We allow extensions to run without CSRF protection but it will be forced future releases. Read the documentation for more information on how to add CSRF protection to your extension.
2023-09-28 19:09:24,300 DEBUG [ckanext.activity.logic.action] Created 'new organization' activity
{"approval_status": "approved", "created": "2023-09-28T19:09:24.221954", "description": "Usually provide style feeling after respond.", "display_name": "Gonzales, Rodriguez and Nelson", "id": "c46daccf-a93b-4162-9847-eb601cbdb8bf", "image_display_url": "https://placekitten.com/259/49", "image_url": "https://placekitten.com/259/49", "is_organization": true, "name": "organization-vkmz-7266-qtfe", "num_followers": 0, "package_count": 0, "state": "active", "title": "Gonzales, Rodriguez and Nelson", "type": "organization", "users": [{"about": null, "activity_streams_email_notifications": false, "capacity": "admin", "created": "2023-09-28T18:49:23.181812", "display_name": "default", "email_hash": "d41d8cd98f00b204e9800998ecf8427e", "fullname": null, "id": "2fdd938d-d313-44e2-9da3-cbe87ad8c3f2", "image_display_url": null, "image_url": null, "last_active": null, "name": "default", "number_created_packages": 0, "state": "active", "sysadmin": true}], "extras": [], "tags": [], "groups": []}
sudo ckan -c /etc/ckan/default/ckan.ini generate fake-data dataset --owner_org=c46daccf-a93b-4162-9847-eb601cbdb8bf
sudo vi /etc/ckan/default/ckan.ini
change for instance title and then restart to take changes into account:
sudo supervisorctl restart ckan-uwsgi:*
### Install extension
Need sources:
sudo /usr/lib/ckan/default/bin/pip install -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.10.1/requirements.txt
sudo /usr/lib/ckan/default/bin/pip install -r https://raw.githubusercontent.com/ckan/ckan/ckan-2.10.1/dev-requirements.txt
In the oracle folder:
```
ssh -X -i ssh-key-2023-09-28.key ubuntu@158.39.201.32
```
We need to be `root` to define our extension and put it in the right folder:
sudo bash -i
Then activate ckan environment:
```
. /usr/lib/ckan/default/bin/activate
```
We tried to use `cookiecutter` to generate the extension (as mentioned in the [documentation](https://docs.ckan.org/en/2.10/extensions/tutorial.html)) but it failed:
```
project [Project's name (must begin with 'ckanext-')]: ckanext-iauthfunctions
keywords [A space separated list of keywords]: tutorial
description []:
author []:
author_email []:
github_user_name [Github user or organization name]: annefou
project_shortname [iauthfunctions]:
plugin_class_name [IauthfunctionsPlugin]:
include_examples [0]:
Traceback (most recent call last):
File "/tmp/tmp438bc8g_.py", line 99, in <module>
recut()
File "/tmp/tmp438bc8g_.py", line 75, in recut
gen.generate_file(project_dir=destination,
File "/usr/lib/ckan/default/lib/python3.10/site-packages/cookiecutter/generate.py", line 173, in generate_file
tmpl = env.get_template(infile_fwd_slashes)
File "/usr/lib/ckan/default/lib/python3.10/site-packages/jinja2/environment.py", line 1010, in get_template
return self._load_template(name, globals)
File "/usr/lib/ckan/default/lib/python3.10/site-packages/jinja2/environment.py", line 969, in _load_template
template = self.loader.load(self, name, self.make_globals(globals))
File "/usr/lib/ckan/default/lib/python3.10/site-packages/jinja2/loaders.py", line 126, in load
source, filename, uptodate = self.get_source(environment, name)
File "/usr/lib/ckan/default/lib/python3.10/site-packages/jinja2/loaders.py", line 218, in get_source
raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: setup.py
ERROR: Stopping generation because post_gen_project hook script didn't exit successfully
Hook script failed (exit status: 1)
```
We tried a few things but it did not work. However, it works using `ckan generate extension`:
```
cd /usr/lib/ckan/default/src
ckan generate extension
```
Below is the output we got:
```
Extension's name [must begin 'ckanext-']: ckanext-iauthfunctions
Author's name []:
Author's email []:
Your Github user or organization name []:
Brief description of the project []:
List of keywords (separated by spaces) [CKAN]:
Do you want to include code examples? [y/N]:
Written: /usr/lib/ckan/default/src/ckanext-iauthfunctions
```
Below is what we have in plugin.py:
```
cat ckanext-iauthfunctions/ckanext/iauthfunctions/plugin.py
```
It returns:
```
import ckan.plugins as plugins
import ckan.plugins.toolkit as toolkit
class IauthfunctionsPlugin(plugins.SingletonPlugin):
plugins.implements(plugins.IConfigurer)
# IConfigurer
def update_config(self, config_):
toolkit.add_template_directory(config_, "templates")
toolkit.add_public_directory(config_, "public")
toolkit.add_resource("assets", "iauthfunctions")
```
Then we need to add in the setup and entry point:
```
vi ckanext-iauthfunctions/setup.py
```
Below is what we have in the file:
```
# -*- coding: utf-8 -*-
from setuptools import setup
setup(
entry_points='''
[ckan.plugins]
example_iauthfunctions=ckanext.iauthfunctions.plugin:IAuthFunctionsPlugin
''',
# If you are changing from the default layout of your extension, you may
# have to change the message extractors, you can read more about babel
# message extraction at
# http://babel.pocoo.org/docs/messages/#extraction-method-mapping-and-configuration
message_extractors={
'ckanext': [
('**.py', 'python', None),
('**.js', 'javascript', None),
('**/templates/**.html', 'ckan', None),
],
}
)
```
Then we need to install the extension:
```
. /usr/lib/ckan/default/bin/activate
cd /usr/lib/ckan/default/src/ckanext-iauthfunctions
python setup.py develop
```
Finally we need to enable the plugin:
```
vi /etc/ckan/default/ckan.ini
```
And add the name of the function (what is on the left handside in plugin.py)
Then we have in ckan.ini:
```
## Plugins Settings ############################################################
ckan.plugins = activity example_iauthfunctions
ckan.resource_proxy.timeout = 5
```
Then we need to restart:
```
supervisorctl restart ckan-uwsgi:*
```
## Documentation
There are two cool inline blogs that detail how to implement a CKAN plugin.
- https://medium.com/@pooya.oladazimi/how-to-develop-a-plugin-for-ckan-part-one-45e7ca1f2270
- https://medium.com/@pooya.oladazimi/how-to-develop-a-ckan-plugin-part-2-templates-f798aeeaa7f8
## Adding signposting to CKAN
```
ckan generate extension
```
We then need answer a few questions:
```
Extension's name [must begin 'ckanext-']: ckanext-signposting
Author's name []: Anne Fouilloux
Author's email []: annef@simula.no
Your Github user or organization name []: annefou
Brief description of the project []: CKAN extension for signposting
List of keywords (separated by spaces) [CKAN]:
Do you want to include code examples? [y/N]:
Written: /usr/lib/ckan/default/src/ckanext-signposting
```