diff --git a/.gitattributes b/.gitattributes
index 9963dddc5e..1ebf0b221e 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -14,6 +14,7 @@
*.jpeg binary
*.gif binary
*.webp binary
+*.avif binary
*.ico binary
*.mo binary
*.pdf binary
@@ -22,6 +23,7 @@
*.phar binary
*.woff binary
*.woff2 binary
+*.ttc binary
*.ttf binary
*.otf binary
*.eot binary
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 6d5c698cd1..72059052dc 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -9,21 +9,22 @@ on:
pull_request:
branches:
- '*'
+ workflow_dispatch:
permissions:
contents: read
jobs:
testsuite:
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
- php-version: ['7.4', '8.0', '8.1']
+ php-version: ['7.4', '8.0', '8.1', '8.2']
name: PHP ${{ matrix.php-version }}
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
@@ -34,11 +35,7 @@ jobs:
- name: Composer install
run: |
- if [[ ${{ matrix.php-version }} == '8.1' ]]; then
- composer update --ignore-platform-reqs
- else
- composer update
- fi
+ composer update
composer run-script post-install-cmd --no-interaction
- name: Run PHPUnit
@@ -49,11 +46,11 @@ jobs:
DATABASE_TEST_URL: sqlite://./testdb.sqlite
coding-standard:
- name: Coding Standard
- runs-on: ubuntu-18.04
+ name: Coding Standard & Static Analysis
+ runs-on: ubuntu-22.04
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
@@ -61,29 +58,14 @@ jobs:
php-version: '7.4'
extensions: mbstring, intl
coverage: none
+ tools: cs2pr, phpstan:1
- name: Composer install
run: composer install
- name: Run PHP CodeSniffer
- run: composer cs-check
-
- static-analysis:
- name: Static Analysis
- runs-on: ubuntu-18.04
-
- steps:
- - uses: actions/checkout@v3
-
- - name: Setup PHP
- uses: shivammathur/setup-php@v2
- with:
- php-version: '7.4'
- extensions: mbstring, intl
- coverage: none
-
- - name: Composer install
- run: composer require --dev phpstan/phpstan:^1.0.0
+ run: vendor/bin/phpcs --report=checkstyle | cs2pr
- name: Run phpstan
- run: vendor/bin/phpstan
+ if: always()
+ run: phpstan
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
index ebd280469c..69e7d139d4 100644
--- a/.github/workflows/stale.yml
+++ b/.github/workflows/stale.yml
@@ -16,7 +16,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/stale@v5
+ - uses: actions/stale@v8
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-message: 'This issue is stale because it has been open for 120 days with no activity. Remove the `stale` label or comment or this will be closed in 15 days'
diff --git a/.gitignore b/.gitignore
index 25d7bb5718..beded96080 100644
--- a/.gitignore
+++ b/.gitignore
@@ -60,3 +60,5 @@ yarn-error.log
# PHP Intel
.phpintel
*.mwb.bak
+/cron.d/*
+/ansible/roles/crontab/templates/*.txt
diff --git a/README.md b/README.md
index 8e58d5180d..f0b0e973ea 100644
--- a/README.md
+++ b/README.md
@@ -42,7 +42,7 @@ automated upgrades, so you have to do any updates manually.
## Configuration
-Read and edit the environment specific `config/app_local.php` and setup the
+Read and edit the environment specific `config/app_local.php` and set up the
`'Datasources'` and any other configuration relevant for your application.
Other environment agnostic settings can be changed in `config/app.php`.
diff --git a/Vagrantfile b/Vagrantfile
index 6b48aacbc1..fb410a63ea 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -4,6 +4,10 @@ def fail_with_message(msg)
fail Vagrant::Errors::VagrantError.new, msg
end
+def is_arm64()
+ `uname -m` == "arm64" || `/usr/bin/arch -64 sh -c "sysctl -in sysctl.proc_translated"`.strip() == "0"
+end
+
config_path = __dir__
config_file = File.join(config_path, 'vagrant.yml')
@@ -21,14 +25,18 @@ Vagrant.configure("2") do |config|
config.hostmanager.include_offline = true
config.vm.define settings['name'] do |node|
- node.vm.box = settings['box']
- node.vm.provider "vmware_fusion" do |v, override|
- v.vmx["memsize"] = settings['memory']
- v.vmx["numvcpus"] = settings['cpus']
- v.whitelist_verified = true
- v.ssh_info_public = true
- v.port_forward_network_pause = 10
+ if is_arm64()
+ node.vm.box = settings['arm64_box']
+ else
+ node.vm.box = settings['box']
+ end
+
+ node.vm.provider "parallels" do |prl|
+ prl.name = settings['vm_name']
+ prl.memory = settings['memory']
+ prl.cpus = settings['cpus']
+ prl.linked_clone = false
end
node.vm.provider "virtualbox" do |v, override|
@@ -38,9 +46,18 @@ Vagrant.configure("2") do |config|
v.customize ["modifyvm", :id, "--cpus", settings['cpus']]
end
- # Prefer vmware_fusion over virtualbox
- node.vm.provider "vmware_fusion"
+ node.vm.provider "vmware_fusion" do |v, override|
+ v.vmx["memsize"] = settings['memory']
+ v.vmx["numvcpus"] = settings['cpus']
+ v.whitelist_verified = true
+ v.ssh_info_public = true
+ v.port_forward_network_pause = 10
+ end
+
+ # preference
+ node.vm.provider "parallels"
node.vm.provider "virtualbox"
+ node.vm.provider "vmware_fusion"
node.vm.network "private_network", type: "dhcp"
node.vm.hostname = settings['hostname']
@@ -55,7 +72,7 @@ Vagrant.configure("2") do |config|
#Add any alias:
node.hostmanager.aliases = settings['aliases']
- node.vm.synced_folder ".", settings['app_path'], :nfs => true, :mount_options => ['nolock,vers=3,udp,noatime,actimeo=1']
+ node.vm.synced_folder ".", settings['app_path'], type: "nfs", nfs_udp: false, mount_options: ['nolock,noatime,actimeo=1']
#Fix for Ansible bug resulting in an encoding error
ENV['PYTHONIOENCODING'] = "utf-8"
diff --git a/ansible/inventories/development/group_vars/all.yml b/ansible/inventories/development/group_vars/all.yml
index 1effb1d800..789a4a7011 100644
--- a/ansible/inventories/development/group_vars/all.yml
+++ b/ansible/inventories/development/group_vars/all.yml
@@ -1,4 +1,5 @@
---
+mysql_environment: development
nginx_environment: development
nginx_ssl_crt:
- cakephp.app.local.crt
@@ -61,3 +62,7 @@ nginx_sites_available:
- cakephp.app.local.conf
nginx_sites_enabled:
- cakephp.app.local.conf
+active_crontab_files:
+ development:
+ - concat/initial.tab
+ - concat/clear_tmp_files.tab
diff --git a/ansible/playbooks/development.yml b/ansible/playbooks/development.yml
index 810469817e..231bd6156c 100644
--- a/ansible/playbooks/development.yml
+++ b/ansible/playbooks/development.yml
@@ -12,14 +12,17 @@
app_name: "cakephp-app"
become_alternate_user: "vagrant"
roles:
- - system
- - ntp
- - php
- - nginx
- - mysql
- - memcached
- - wkhtmltopdf
- - nodejs
+ - {role: "system", tags: "system"}
+ - {role: "libssl", tags: "libssl"}
+ - {role: "ntp", tags: "ntp"}
+ - {role: "php", tags: "php"}
+ - {role: "nginx", tags: "nginx"}
+ - {role: "wkhtmltopdf", tags: "wkhtmltopdf"}
+ - {role: "mysql", tags: "mysql"}
+ - {role: "memcached", tags: "memcached"}
+ - {role: "nodejs", tags: "nodejs"}
+ - {role: "crontab", tags: "crontab"}
+ - {role: "mailhog", tags: "mailhog"}
tasks:
- name: DONT PANIC NTP and VM Should Accept Traveling to the Future by more than 1000s
lineinfile:
@@ -29,7 +32,7 @@
- name: make a symbolic link for application crontab file
file:
- src: "{{ app_path }}/crontab"
+ src: "{{ app_path }}/cron.d/development"
dest: "/etc/cron.d/{{ app_name }}"
state: link
@@ -53,6 +56,13 @@
args:
executable: /bin/bash
+ - name: Create CakePHP dev config from default
+ copy:
+ src: "{{ app_path }}/config/app_local.example.php"
+ dest: "{{ app_path }}/config/app_local.php"
+ remote_src: yes
+ force: no
+
- name: Create /var/files/
file:
path: "/var/files/"
@@ -66,38 +76,43 @@
name: nginx
state: restarted
- - name: restart php8.1-fpm
+ - name: restart php8.3-fpm
service:
- name: php8.1-fpm
+ name: php8.3-fpm
state: restarted
- name: Create MySQL vagrant user
shell: "mysql -e \"CREATE USER IF NOT EXISTS 'vagrant'@'%' IDENTIFIED WITH mysql_native_password BY 'vagrant'\";"
become: yes
become_user: root
+ when: mysql_server_installed
- name: Grant the MySQL vagrant user some permissions
shell: "mysql -e \"GRANT ALL on *.* to 'vagrant'@'%'WITH GRANT OPTION\";"
become: yes
become_user: root
+ when: mysql_server_installed
- name: Flushing the MySQL Privileges
shell: "mysql -e \"FLUSH PRIVILEGES\";"
become: yes
become_user: root
+ when: mysql_server_installed
- name: Create the MySQL Database for the project
shell: "mysql -e \"CREATE DATABASE IF NOT EXISTS cakephp_app DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;\";"
become: yes
become_user: root
+ when: mysql_server_installed
- name: Check if app migrations have already been ran
shell: "mysql -e \"SELECT * FROM information_schema.tables WHERE table_schema = 'cakephp_app'\";"
become: yes
become_user: root
- when: mysql_installed is defined
+ when: mysql_server_installed
register: migrationran # above query returns nothing when no tables exist
- name: Run app migrations
command: "{{ app_path }}/bin/cake migrations migrate -vvvv"
when: migrationran.stdout == "" # stdout of the variable we just registered will be empty when no tables exist
+ ignore_errors: yes
diff --git a/ansible/roles/crontab/tasks/main.yml b/ansible/roles/crontab/tasks/main.yml
new file mode 100644
index 0000000000..ee44bf90e9
--- /dev/null
+++ b/ansible/roles/crontab/tasks/main.yml
@@ -0,0 +1,12 @@
+---
+- name: Loop Over and Create temp Template for each desired crontab
+ template:
+ src: concat.j2
+ dest: "{{ app_path }}/ansible/roles/crontab/templates/{{ item }}.txt"
+ loop: "{{ active_crontab_files | list }}"
+
+- name: Loop Over and Create final file for each crontab file
+ template:
+ src: "{{ item }}.txt"
+ dest: "{{ app_path }}/cron.d/{{ item }}"
+ loop: "{{ active_crontab_files | list }}"
diff --git a/ansible/roles/crontab/templates/concat.j2 b/ansible/roles/crontab/templates/concat.j2
new file mode 100644
index 0000000000..447a5be0db
--- /dev/null
+++ b/ansible/roles/crontab/templates/concat.j2
@@ -0,0 +1,4 @@
+{% for i in active_crontab_files[item] %}
+{{ lookup('file', i) }}
+
+{% endfor %}
diff --git a/ansible/roles/crontab/templates/concat/clear_tmp_files.tab b/ansible/roles/crontab/templates/concat/clear_tmp_files.tab
new file mode 100644
index 0000000000..11ef6db2e1
--- /dev/null
+++ b/ansible/roles/crontab/templates/concat/clear_tmp_files.tab
@@ -0,0 +1,2 @@
+# Every 30 minutes, delete tmp file uploads older than 6 hours
+*/30 * * * * root find {{ app_path }}/tmp/files/* -mmin +360 ! -name "empty" -exec rm {} \; > /dev/null 2>&1
diff --git a/ansible/roles/crontab/templates/concat/initial.tab b/ansible/roles/crontab/templates/concat/initial.tab
new file mode 100644
index 0000000000..1b59d38a96
--- /dev/null
+++ b/ansible/roles/crontab/templates/concat/initial.tab
@@ -0,0 +1,4 @@
+# Generated Crontab - Check Ansible Role/Playbook
+
+TZ="America/New_York"
+MAILTO=""
diff --git a/ansible/roles/libssl/tasks/main.yaml b/ansible/roles/libssl/tasks/main.yaml
new file mode 100644
index 0000000000..691f78608a
--- /dev/null
+++ b/ansible/roles/libssl/tasks/main.yaml
@@ -0,0 +1,19 @@
+---
+- name: 'Download libssl1.1 arm64'
+ get_url:
+ url: http://ports.ubuntu.com/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.22_arm64.deb
+ dest: /root/libssl.deb
+ force: false
+ validate_certs: no # this is fucked up
+ when: ansible_architecture == 'aarch64'
+
+- name: 'Download libssl1.1 x86_64'
+ get_url:
+ url: http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.22_amd64.deb
+ dest: /root/libssl.deb
+ force: false
+ validate_certs: no # this is fucked up
+ when: ansible_architecture == 'x86_64'
+
+- name: 'Install libssl1.1'
+ command: dpkg -i /root/libssl.deb
diff --git a/ansible/roles/mailhog/handlers/main.yml b/ansible/roles/mailhog/handlers/main.yml
new file mode 100644
index 0000000000..df09debdc2
--- /dev/null
+++ b/ansible/roles/mailhog/handlers/main.yml
@@ -0,0 +1,16 @@
+---
+- name: start and enable mailhog
+ service:
+ name: mailhog
+ state: started
+ enabled: yes
+
+- name: restart mailhog
+ service:
+ name: mailhog
+ state: restarted
+
+- name: start mailhog
+ service:
+ name: mailhog
+ state: started
\ No newline at end of file
diff --git a/ansible/roles/mailhog/tasks/main.yml b/ansible/roles/mailhog/tasks/main.yml
new file mode 100644
index 0000000000..950eb8aff5
--- /dev/null
+++ b/ansible/roles/mailhog/tasks/main.yml
@@ -0,0 +1,30 @@
+---
+- name: Install golang-go
+ apt:
+ pkg:
+ - golang-go
+ state: present
+ update_cache: yes
+
+- name: Install Mailhog
+ shell: "go install github.com/mailhog/MailHog@latest"
+ become: yes
+ become_user: root
+
+- name: Copy Mailhog to /usr/local/bin
+ copy:
+ src: /root/go/bin/MailHog
+ dest: /usr/local/bin/mailhog
+ owner: root
+ group: root
+ mode: 0755
+ remote_src: yes
+
+- name: Create Service File
+ template:
+ src: "mailhog.service"
+ dest: /etc/systemd/system/mailhog.service
+ owner: root
+ group: root
+ mode: 0644
+ notify: start and enable mailhog
diff --git a/ansible/roles/mailhog/templates/mailhog.service b/ansible/roles/mailhog/templates/mailhog.service
new file mode 100644
index 0000000000..e730275a9e
--- /dev/null
+++ b/ansible/roles/mailhog/templates/mailhog.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Mailhog
+After=network.target
+[Service]
+ExecStart=/usr/local/bin/mailhog \
+ -api-bind-addr 0.0.0.0:8025 \
+ -ui-bind-addr 0.0.0.0:8025 \
+ -smtp-bind-addr 0.0.0.0:1025
+
+[Install]
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/ansible/roles/memcached/defaults/main.yml b/ansible/roles/memcached/defaults/main.yml
index cc5e768d91..892f66333b 100755
--- a/ansible/roles/memcached/defaults/main.yml
+++ b/ansible/roles/memcached/defaults/main.yml
@@ -1,5 +1,5 @@
---
-memory: 64
+memory: 512
tcp_port: 11_211
udp_port: 11_211
listen: 0.0.0.0
diff --git a/ansible/roles/mysql/handlers/main.yml b/ansible/roles/mysql/handlers/main.yml
index 9ec0733d18..cdc2762168 100644
--- a/ansible/roles/mysql/handlers/main.yml
+++ b/ansible/roles/mysql/handlers/main.yml
@@ -3,3 +3,8 @@
service:
name: mysql
state: restarted
+
+- name: start mysql
+ service:
+ name: mysql
+ state: started
diff --git a/ansible/roles/mysql/tasks/main.yml b/ansible/roles/mysql/tasks/main.yml
index c09aa09656..44909d1f50 100755
--- a/ansible/roles/mysql/tasks/main.yml
+++ b/ansible/roles/mysql/tasks/main.yml
@@ -1,44 +1,45 @@
---
-- name: Download MySQL Apt Repo Setup Tool
- get_url:
- url: https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb
- dest: /tmp/mysql-apt-config.deb
- force: false
-
-- name: ensure mysql upstream repository package is configured
- debconf:
- name: mysql-apt-config
- question: "mysql-apt-config/{{ item.question }}"
- value: "{{ item.value }}"
- vtype: "{{ item.vtype | default ('select') }}"
- with_items:
- - question: select-server
- value: "mysql-8.0"
- become: yes
- become_user: root
-
-- name: Run MySQL Apt Repo Setup Tool
- apt:
- deb: /tmp/mysql-apt-config.deb
- become: yes
- become_user: root
-
-- name: Apt Update
+- name: Install MySQL Server & Client packages
apt:
+ pkg:
+ - mysql-server
+ - mysql-client
+ state: present
update_cache: yes
- cache_valid_time: 3600
+ when: mysql_environment != 'production'
+ environment:
+ DEBIAN_FRONTEND: noninteractive
+ register: mysql_server_installed
+ notify: start mysql
-- name: Install MySQL packages
+- name: Install MySQL Client Package
apt:
pkg:
- - mysql-server
- mysql-client
state: present
update_cache: yes
+ when: mysql_environment == 'production'
environment:
DEBIAN_FRONTEND: noninteractive
+ register: mysql_client_installed
+
+- name: MySQL configurations for XL AWS Instance
+ blockinfile:
+ path: /etc/mysql/mysql.conf.d/mysqld.cnf
+ block: |
+ max_allowed_packet=67108864
+ key_buffer_size=64M
+ max_allowed_packet=64M
+ join_buffer_size=512K
+ max_connections=3000
+ innodb_buffer_pool_size=12G
+ innodb_log_file_size=1G
+ innodb_buffer_pool_instances=12
+ when: mysql_environment != 'production'
-- name: start mysql
- service:
- name: mysql
- state: started
+- name: Install Alternative for /etc/alternatives/my.cnf
+ command: 'update-alternatives --install /etc/mysql/my.cnf my.cnf /etc/mysql/mysql.cnf 200'
+ when: mysql_environment != 'production'
+ become: yes
+ become_user: root
+ notify: restart mysql
diff --git a/ansible/roles/nginx/tasks/main.yml b/ansible/roles/nginx/tasks/main.yml
index c43fdc0830..0b45a58c58 100755
--- a/ansible/roles/nginx/tasks/main.yml
+++ b/ansible/roles/nginx/tasks/main.yml
@@ -1,7 +1,8 @@
---
- name: Add PPA
- apt_repository:
- repo: "ppa:ondrej/nginx-mainline"
+ shell: "add-apt-repository -y ppa:ondrej/nginx-mainline"
+ become: yes
+ become_user: root
- name: Apt Update
apt:
@@ -9,9 +10,9 @@
- name: Install Nginx
apt:
- name: nginx
- update_cache: yes
- cache_valid_time: 3600
+ pkg:
+ - nginx
+ state: present
- name: Create SSL Directories (ssl.crt)
file:
@@ -34,6 +35,7 @@
mode: 0644
backup: yes
with_items: "{{ nginx_ssl_crt }}"
+ when: nginx_environment == 'development'
- name: COPY SSL KEYS
copy:
@@ -44,6 +46,7 @@
mode: 0644
backup: yes
with_items: "{{ nginx_ssl_key }}"
+ when: nginx_environment == 'development'
- name: Sites Available Configs
template:
diff --git a/ansible/roles/nginx/templates/development/sites-available/cakephp.app.local.conf b/ansible/roles/nginx/templates/development/sites-available/cakephp.app.local.conf
index 23867c2b53..df68d196ca 100644
--- a/ansible/roles/nginx/templates/development/sites-available/cakephp.app.local.conf
+++ b/ansible/roles/nginx/templates/development/sites-available/cakephp.app.local.conf
@@ -26,7 +26,7 @@ server {
# Pass the PHP scripts to FastCGI server
location ~ \.php$ {
- fastcgi_pass unix:/run/php/php8.1-fpm.sock;
+ fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_pass_header Set-Cookie;
fastcgi_ignore_headers Cache-Control Expires;
diff --git a/ansible/roles/nginx/templates/nginx.conf b/ansible/roles/nginx/templates/nginx.conf
index 2286df7e07..3123840eed 100755
--- a/ansible/roles/nginx/templates/nginx.conf
+++ b/ansible/roles/nginx/templates/nginx.conf
@@ -41,7 +41,7 @@ http {
# SSL Settings
##
- ssl_protocols TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
+ ssl_protocols TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ssl_session_cache shared:SSL:10m;
diff --git a/ansible/roles/nodejs/defaults/main.yml b/ansible/roles/nodejs/defaults/main.yml
index 4d1357ae8c..1db7ca7b4a 100755
--- a/ansible/roles/nodejs/defaults/main.yml
+++ b/ansible/roles/nodejs/defaults/main.yml
@@ -1,3 +1,3 @@
---
-nvm_version: v0.34.0
-nodejs_version: 12.10.0
+nvm_version: v0.39.7
+nodejs_version: 20.12.2
diff --git a/ansible/roles/ntp/tasks/main.yml b/ansible/roles/ntp/tasks/main.yml
index bf012d1114..f44e92d727 100644
--- a/ansible/roles/ntp/tasks/main.yml
+++ b/ansible/roles/ntp/tasks/main.yml
@@ -7,5 +7,12 @@
- ntpdate
state: present
+- name: Copy configuration file
+ template:
+ src: ntp.conf
+ dest: /etc/ntp.conf
+ backup: yes
+ notify: restart ntp
+
- name: set timeone to UTC
command: timedatectl set-timezone UTC
diff --git a/ansible/roles/ntp/templates/ntp.conf b/ansible/roles/ntp/templates/ntp.conf
new file mode 100644
index 0000000000..bc7e8f036e
--- /dev/null
+++ b/ansible/roles/ntp/templates/ntp.conf
@@ -0,0 +1,63 @@
+# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help
+
+driftfile /var/lib/ntp/ntp.drift
+
+# Leap seconds definition provided by tzdata
+leapfile /usr/share/zoneinfo/leap-seconds.list
+
+# Enable this if you want statistics to be logged.
+#statsdir /var/log/ntpstats/
+
+statistics loopstats peerstats clockstats
+filegen loopstats file loopstats type day enable
+filegen peerstats file peerstats type day enable
+filegen clockstats file clockstats type day enable
+
+# Specify one or more NTP servers.
+
+# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
+# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
+# more information.
+pool tick.usno.navy.mil iburst
+pool tock.usno.navy.mil iburst
+pool time-a.nist.gov iburst
+pool time-b.nist.gov iburst
+pool time-c.nist.gov iburst
+pool nist1.aol-va.symmetricom.com iburst
+pool time-nw.nist.gov iburst
+
+# Use Ubuntu's ntp server as a fallback.
+pool time.nist.gov
+
+# Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for
+# details. The web page
pdo_sqlite
so DebugKit can work properly.';
+ }
+ }
}
return compact('connected', 'error');
@@ -59,9 +67,7 @@
= $this->Html->meta('icon') ?>
-
-
- = $this->Html->css(['normalize.min', 'milligram.min', 'cake', 'home']) ?>
+ = $this->Html->css(['normalize.min', 'milligram.min', 'fonts', 'cake', 'home']) ?>
= $this->fetch('meta') ?>
= $this->fetch('css') ?>
@@ -179,7 +185,7 @@