diff --git a/roles/i2c-clock/files/etc/modules-load.d/rtc-ds1307.conf b/roles/i2c-clock/files/etc/modules-load.d/rtc-ds1307.conf new file mode 100644 index 0000000..2cf3225 --- /dev/null +++ b/roles/i2c-clock/files/etc/modules-load.d/rtc-ds1307.conf @@ -0,0 +1 @@ +rtc-ds1307 \ No newline at end of file diff --git a/roles/i2c-clock/files/etc/systemd/system/rtc-i2c.service b/roles/i2c-clock/files/etc/systemd/system/rtc-i2c.service new file mode 100644 index 0000000..6a82903 --- /dev/null +++ b/roles/i2c-clock/files/etc/systemd/system/rtc-i2c.service @@ -0,0 +1,20 @@ +[Unit] +ConditionCapability=CAP_SYS_TIME +ConditionVirtualization=!container +DefaultDependencies=no +Wants=dev-rtc_i2c.device +After=dev-rtc_i2c.device +Before=systemd-timesyncd.service ntpd.service chrony.service + +[Service] +Type=oneshot +CapabilityBoundingSet=CAP_SYS_TIME +PrivateTmp=yes +ProtectSystem=full +ProtectHome=yes +DeviceAllow=/dev/rtc_i2c rw +DevicePolicy=closed +ExecStart=/usr/bin/echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device && /sbin/hwclock --s + +[Install] +WantedBy=time-sync.target \ No newline at end of file diff --git a/roles/i2c-clock/files/etc/udev/rules.d/55-rtc-i2c.rules b/roles/i2c-clock/files/etc/udev/rules.d/55-rtc-i2c.rules new file mode 100644 index 0000000..391e02a --- /dev/null +++ b/roles/i2c-clock/files/etc/udev/rules.d/55-rtc-i2c.rules @@ -0,0 +1,6 @@ +#/lib/udev/rules.d/50-udev-default.rules:SUBSYSTEM=="rtc", ATTR{hctosys}=="1", SYMLINK+="rtc" +#/lib/udev/rules.d/50-udev-default.rules:SUBSYSTEM=="rtc", KERNEL=="rtc0", SYMLINK+="rtc", OPTIONS+="link_priority=-100" + +# I2C RTC, when added and not the source of the sys clock (kernel), is used ; +# separate name to ensure rtc-i2c.service will not be run on anything else +ACTION=="add", SUBSYSTEMS=="i2c", SUBSYSTEM=="rtc", KERNEL=="rtc0", ATTR{hctosys}=="0", SYMLINK+="rtc_i2c", TAG+="systemd" \ No newline at end of file diff --git a/roles/i2c-clock/tasks/install.yml b/roles/i2c-clock/tasks/install.yml new file mode 100644 index 0000000..c051ea5 --- /dev/null +++ b/roles/i2c-clock/tasks/install.yml @@ -0,0 +1,25 @@ +--- +- become: yes + block: + - name: install i2c-tools + become: yes + apt: + update_cache: yes + pkg: + - i2c-tools + + - name: enable automatic module load + copy: + src: etc/modules-load.d/rtc-ds1307.conf + dest: /etc/modules-load.d/rtc-ds1307.conf + + - name: add systemd service + copy: + src: etc/systemd/system/rtc-i2c.service + dest: /etc/systemd/system/rtc-i2c.service + + - name: enable systemd service + systemd: + name: rtc-i2c.service + enabled: yes + state: started diff --git a/roles/i2c-clock/tasks/main.yml b/roles/i2c-clock/tasks/main.yml new file mode 100644 index 0000000..aeb5083 --- /dev/null +++ b/roles/i2c-clock/tasks/main.yml @@ -0,0 +1,6 @@ +--- +- import_tasks: install.yml + +- import_tasks: set-time.yml + +- import_tasks: remove-fake-clock.yml diff --git a/roles/i2c-clock/tasks/remove-fake-clock.yml b/roles/i2c-clock/tasks/remove-fake-clock.yml new file mode 100644 index 0000000..8aaf155 --- /dev/null +++ b/roles/i2c-clock/tasks/remove-fake-clock.yml @@ -0,0 +1,8 @@ +--- +- name: uninstall fakehw + become: yes + apt: + update_cache: yes + state: absent + pkg: + - fake-hwclock \ No newline at end of file diff --git a/roles/i2c-clock/tasks/set-time.yml b/roles/i2c-clock/tasks/set-time.yml new file mode 100644 index 0000000..2410668 --- /dev/null +++ b/roles/i2c-clock/tasks/set-time.yml @@ -0,0 +1,16 @@ +--- +- become: yes + block: + - name: load hwclock + shell: + cmd: | + modprobe rtc-ds1307 + echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device + - name: update time + shell: + cmd: | + hwclock -w + - name: read time + shell: + cmd: | + hwclock -r \ No newline at end of file