penguins-eggs
Version:
A remaster system tool, compatible with Arch, Debian, Devuan, Ubuntu and others
92 lines (91 loc) • 3.97 kB
JavaScript
/**
* ./src/krill/modules/locale.ts
* penguins-eggs v.10.0.0 / ecmascript 2020
* author: Piero Proietti
* email: piero.proietti@gmail.com
* license: MIT
* https://stackoverflow.com/questions/23876782/how-do-i-split-a-typescript-class-into-multiple-files
*/
import fs from 'node:fs';
import Utils from '../../../classes/utils.js';
import { exec } from '../../../lib/utils.js';
/**
* locale
*/
export default async function locale() {
const defaultLocale = this.language;
if (this.distro.familyId === 'archlinux' || this.distro.familyId === 'debian') {
/**
* influcence: - /etc/default/locale
* - /etc/locale.conf
* - /etc/timezone
*/
let file = this.installTarget + '/etc/default/locale';
let content = '';
content += `LANG=${defaultLocale}\n`;
content += `LC_CTYPE=${defaultLocale}\n`;
content += `LC_NUMERIC=${defaultLocale}\n`;
content += `LC_TIME=${defaultLocale}\n`;
content += `LC_COLLATE=${defaultLocale}\n`;
content += `LC_MONETARY=${defaultLocale}\n`;
content += `LC_MESSAGES=${defaultLocale}\n`;
content += `LC_PAPER=${defaultLocale}\n`;
content += `LC_NAME=${defaultLocale}\n`;
content += `LC_ADDRESS=${defaultLocale}\n`;
content += `LC_TELEPHONE=${defaultLocale}\n`;
content += `LC_MEASUREMENT=${defaultLocale}\n`;
content += `LC_IDENTIFICATION=${defaultLocale}\n`;
content += `LC_ALL=${defaultLocale}\n`;
Utils.write(file, content);
// /etc/locale.conf
file = this.installTarget + '/etc/locale.conf';
Utils.write(file, content);
// timezone Arch Debian
if (fs.existsSync('/etc/localtime')) {
const cmd = `chroot ${this.installTarget} unlink /etc/localtime ${this.toNull}`;
await exec(cmd, this.echo);
}
const cmd = `chroot ${this.installTarget} ln -sf /usr/share/zoneinfo/${this.region}/${this.zone} /etc/localtime ${this.toNull}`;
await exec(cmd, this.echo);
}
else if (this.distro.familyId === 'alpine') {
// locale Alpine
let file = this.installTarget + "/etc/profile.d/00locale.sh";
let content = "";
content += `#!/bin/sh\n`;
content += `export MUSL_LOCPATH="/usr/share/i18n/locales/musl"\n`;
content += `\n`;
content += `export LANG=${defaultLocale}\n`;
content += `export LC_CTYPE=${defaultLocale}\n`;
content += `export LC_NUMERIC=${defaultLocale}\n`;
content += `export LC_TIME=${defaultLocale}\n`;
content += `export LC_COLLATE=${defaultLocale}\n`;
content += `export LC_MONETARY=${defaultLocale}\n`;
content += `export LC_MESSAGES=${defaultLocale}\n`;
content += `export LC_PAPER=${defaultLocale}\n`;
content += `export LC_NAME=${defaultLocale}\n`;
content += `export LC_ADDRESS=${defaultLocale}\n`;
content += `export LC_TELEPHONE=${defaultLocale}\n`;
content += `export LC_MEASUREMENT=${defaultLocale}\n`;
content += `export LC_IDENTIFICATION=${defaultLocale}\n`;
content += `export LC_ALL=${defaultLocale}\n`;
Utils.write(file, content);
await exec(`chmod +x ${file}`);
/**
* https://docs.alpinelinux.org/user-handbook/0.1a/Installing/manual.html
*/
/**
* timezone
*
*/
let tz = `/etc/zoneinfo/${this.region}/${this.zone}`;
await exec(`chroot ${this.installTarget} rm -rf /etc/zoneinfo/* ${this.toNull}`, this.echo);
await exec(`chroot ${this.installTarget} mkdir -p ${tz} ${this.toNull}`, this.echo);
file = `${this.installTarget}/etc/profile.d/timezone.sh`;
content = "";
content += `#!/bin/sh\n`;
content += `export TZ='${tz}'`;
Utils.write(file, content);
await exec(`chmod +x ${file} ${this.toNull}`);
}
}