Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a131b1288a | |||
| ff24710b95 | |||
| 145a7d6271 | |||
| 318469f993 | |||
| d8ae21c31b | |||
| e337afdeb7 | |||
| 591ef6b826 |
6
TODO
6
TODO
@@ -2,6 +2,12 @@
|
|||||||
|
|
||||||
-include WinMTR, build Mac OS X MTR for dist/tools on CD
|
-include WinMTR, build Mac OS X MTR for dist/tools on CD
|
||||||
-include pre-compiled DoxBox for opening LUKS parts on Windows (https://github.com/t-d-k/doxbox)
|
-include pre-compiled DoxBox for opening LUKS parts on Windows (https://github.com/t-d-k/doxbox)
|
||||||
|
-include benchmarking
|
||||||
|
-- http://sourceforge.net/projects/unixbench/
|
||||||
|
-- https://code.google.com/p/byte-unixbench/
|
||||||
|
-- https://github.com/akopytov/sysbench
|
||||||
|
-- (http://blog.due.io/2014/linode-digitalocean-and-vultr-comparison/ etc.)
|
||||||
|
-write doc on required chroot packages (e.g. pv, archiso*, etc.) so those wanting to remaster know which packages to leave in
|
||||||
|
|
||||||
|
|
||||||
## NETWORKING ##
|
## NETWORKING ##
|
||||||
|
|||||||
3
extra/external/SMC_DumpKey/README
vendored
Normal file
3
extra/external/SMC_DumpKey/README
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
taken with graces to http://www.contrib.andrew.cmu.edu/~somlo/OSXKVM/
|
||||||
|
|
||||||
|
Needs to be compiled on linux with gcc, and only runs on genuine Apple hardware (as it polls the SMC chip for the given value)
|
||||||
193
extra/external/SMC_DumpKey/SmcDumpKey.c
vendored
Normal file
193
extra/external/SMC_DumpKey/SmcDumpKey.c
vendored
Normal file
@@ -0,0 +1,193 @@
|
|||||||
|
/*
|
||||||
|
* prints out 4-character name of the SMC key at given index position;
|
||||||
|
*
|
||||||
|
* by Gabriel L. Somlo <somlo@cmu.edu>, Summer 2014
|
||||||
|
*
|
||||||
|
* Compile with: gcc -O2 -o SmcDumpKey SmcDumpKey.c -Wall
|
||||||
|
*
|
||||||
|
* You probably want to "modprobe -r applesmc" before running this...
|
||||||
|
*
|
||||||
|
* Code bits and pieces shamelessly ripped from the linux kernel driver
|
||||||
|
* (drivers/hwmon/applesmc.c by N. Boichat and H. Rydberg)
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License v2 as published by the
|
||||||
|
* Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <sys/io.h>
|
||||||
|
#include <linux/byteorder/little_endian.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define APPLESMC_START 0x300
|
||||||
|
#define APPLESMC_RANGE 0x20
|
||||||
|
|
||||||
|
#define APPLESMC_DATA_PORT (APPLESMC_START + 0x00)
|
||||||
|
#define APPLESMC_CMD_PORT (APPLESMC_START + 0x04)
|
||||||
|
|
||||||
|
#define APPLESMC_READ_CMD 0x10
|
||||||
|
#define APPLESMC_GET_KEY_BY_INDEX_CMD 0x12
|
||||||
|
#define APPLESMC_GET_KEY_TYPE_CMD 0x13
|
||||||
|
|
||||||
|
|
||||||
|
/* wait up to 128 ms for a status change. */
|
||||||
|
#define APPLESMC_MIN_WAIT 0x0010
|
||||||
|
#define APPLESMC_RETRY_WAIT 0x0100
|
||||||
|
#define APPLESMC_MAX_WAIT 0x20000
|
||||||
|
|
||||||
|
|
||||||
|
#define APPLESMC_KEY_NAME_LEN 4
|
||||||
|
#define APPLESMC_KEY_TYPE_LEN 4
|
||||||
|
|
||||||
|
typedef struct key_type {
|
||||||
|
uint8_t data_len;
|
||||||
|
uint8_t data_type[APPLESMC_KEY_TYPE_LEN];
|
||||||
|
uint8_t flags;
|
||||||
|
} __attribute__((packed)) key_type;
|
||||||
|
|
||||||
|
|
||||||
|
/* wait_read - Wait for a byte to appear on SMC port. */
|
||||||
|
static int
|
||||||
|
wait_read(void)
|
||||||
|
{
|
||||||
|
uint8_t status;
|
||||||
|
int us;
|
||||||
|
|
||||||
|
for (us = APPLESMC_MIN_WAIT; us < APPLESMC_MAX_WAIT; us <<= 1) {
|
||||||
|
usleep(us);
|
||||||
|
status = inb(APPLESMC_CMD_PORT);
|
||||||
|
/* read: wait for smc to settle */
|
||||||
|
if (status & 0x01)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(stderr, "wait_read() fail: 0x%02x\n", status);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*send_byte - Write to SMC port, retrying when necessary. */
|
||||||
|
static int
|
||||||
|
send_byte(uint8_t cmd, unsigned short port)
|
||||||
|
{
|
||||||
|
uint8_t status;
|
||||||
|
int us;
|
||||||
|
|
||||||
|
outb(cmd, port);
|
||||||
|
for (us = APPLESMC_MIN_WAIT; us < APPLESMC_MAX_WAIT; us <<= 1) {
|
||||||
|
usleep(us);
|
||||||
|
status = inb(APPLESMC_CMD_PORT);
|
||||||
|
/* write: wait for smc to settle */
|
||||||
|
if (status & 0x02)
|
||||||
|
continue;
|
||||||
|
/* ready: cmd accepted, return */
|
||||||
|
if (status & 0x04)
|
||||||
|
return 0;
|
||||||
|
/* timeout: give up */
|
||||||
|
if (us << 1 == APPLESMC_MAX_WAIT)
|
||||||
|
break;
|
||||||
|
/* busy: long wait and resend */
|
||||||
|
usleep(APPLESMC_RETRY_WAIT);
|
||||||
|
outb(cmd, port);
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(stderr,
|
||||||
|
"send_byte(0x%02x, 0x%04x) fail: 0x%02x\n", cmd, port, status);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
send_argument(const uint8_t *key)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < APPLESMC_KEY_NAME_LEN; i++)
|
||||||
|
if (send_byte(key[i], APPLESMC_DATA_PORT))
|
||||||
|
return -1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
read_smc(uint8_t cmd, const uint8_t *key, uint8_t *buf, uint8_t len)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (send_byte(cmd, APPLESMC_CMD_PORT) || send_argument(key)) {
|
||||||
|
fprintf(stderr, "%.4s: read arg fail\n", key);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (send_byte(len, APPLESMC_DATA_PORT)) {
|
||||||
|
fprintf(stderr, "%.4s: read len fail\n", key);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < len; i++) {
|
||||||
|
if (wait_read()) {
|
||||||
|
fprintf(stderr, "%.4s: read data[%d] fail\n", key, i);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
buf[i] = inb(APPLESMC_DATA_PORT);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
key_type kt;
|
||||||
|
uint8_t data_buf[UCHAR_MAX];
|
||||||
|
uint8_t i;
|
||||||
|
|
||||||
|
if (argc != 2 || strlen(argv[1]) != APPLESMC_KEY_NAME_LEN) {
|
||||||
|
fprintf(stderr, "\nUsage: %s <4-char-key-name>\n\n", argv[0]);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ioperm(APPLESMC_START, APPLESMC_RANGE, 1) != 0) {
|
||||||
|
perror("ioperm failed");
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (read_smc(APPLESMC_GET_KEY_TYPE_CMD,
|
||||||
|
(uint8_t *)argv[1], (uint8_t *)&kt, sizeof(kt)) != 0) {
|
||||||
|
fprintf(stderr, "\nread_smc get_key_type error\n\n");
|
||||||
|
return -3;
|
||||||
|
}
|
||||||
|
printf(" type=\"");
|
||||||
|
for (i = 0; i < APPLESMC_KEY_TYPE_LEN; i++)
|
||||||
|
printf(isprint(kt.data_type[i]) ? "%c" : "\\x%02x",
|
||||||
|
(uint8_t)kt.data_type[i]);
|
||||||
|
printf("\" length=%d flags=%x\n", kt.data_len, kt.flags);
|
||||||
|
|
||||||
|
if (read_smc(APPLESMC_READ_CMD,
|
||||||
|
(uint8_t *)argv[1], data_buf, kt.data_len) != 0) {
|
||||||
|
fprintf(stderr, "\nread_smc get_key_data error\n\n");
|
||||||
|
return -4;
|
||||||
|
}
|
||||||
|
printf(" data=\"");
|
||||||
|
for (i = 0; i < kt.data_len; i++)
|
||||||
|
printf(isprint(data_buf[i]) ? "%c" : "\\x%02x",
|
||||||
|
(uint8_t)data_buf[i]);
|
||||||
|
printf("\"\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -130,6 +130,7 @@ iotop
|
|||||||
iozone
|
iozone
|
||||||
ipcalc
|
ipcalc
|
||||||
iperf
|
iperf
|
||||||
|
iperf3
|
||||||
iproute2
|
iproute2
|
||||||
ipsec-tools
|
ipsec-tools
|
||||||
iptraf-ng
|
iptraf-ng
|
||||||
|
|||||||
@@ -46,7 +46,8 @@ _mnt_sfs() {
|
|||||||
|
|
||||||
if [[ "${copytoram}" == "y" ]]; then
|
if [[ "${copytoram}" == "y" ]]; then
|
||||||
msg -n ":: Copying squashfs image to RAM..."
|
msg -n ":: Copying squashfs image to RAM..."
|
||||||
if ! cp "${img}" "/run/archiso/copytoram/${img_fullname}" ; then
|
#if ! cp "${img}" "/run/archiso/copytoram/${img_fullname}" ; then
|
||||||
|
if ! pv -pterabT "${img}" > "/run/archiso/copytoram/${img_fullname}" ; then
|
||||||
echo "ERROR: while copy '${img}' to '/run/archiso/copytoram/${img_fullname}'"
|
echo "ERROR: while copy '${img}' to '/run/archiso/copytoram/${img_fullname}'"
|
||||||
launch_interactive_shell
|
launch_interactive_shell
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ build() {
|
|||||||
add_binary losetup
|
add_binary losetup
|
||||||
add_binary mountpoint
|
add_binary mountpoint
|
||||||
add_binary truncate
|
add_binary truncate
|
||||||
|
add_binary pv
|
||||||
|
|
||||||
add_file /usr/lib/udev/rules.d/60-cdrom_id.rules
|
add_file /usr/lib/udev/rules.d/60-cdrom_id.rules
|
||||||
add_file /usr/lib/udev/rules.d/10-dm.rules
|
add_file /usr/lib/udev/rules.d/10-dm.rules
|
||||||
|
|||||||
@@ -32,16 +32,16 @@ function stuffy {
|
|||||||
# now for setting up loader config/entries. maybe add memtest or something in the future? i dunno.
|
# now for setting up loader config/entries. maybe add memtest or something in the future? i dunno.
|
||||||
cat > ${TEMPDIR}/loader/loader.conf << EOF
|
cat > ${TEMPDIR}/loader/loader.conf << EOF
|
||||||
timeout 3
|
timeout 3
|
||||||
default ${UXNAME}_ram
|
default ${UXNAME}
|
||||||
EOF
|
EOF
|
||||||
cat > ${TEMPDIR}/loader/entries/${UXNAME}_ram.conf << EOF
|
cat > ${TEMPDIR}/loader/entries/${UXNAME}_ram.conf << EOF
|
||||||
title ${PNAME}
|
title ${PNAME} (RAM)
|
||||||
linux /boot/${UXNAME}.kern
|
linux /boot/${UXNAME}.kern
|
||||||
initrd /boot/${UXNAME}.img
|
initrd /boot/${UXNAME}.img
|
||||||
options copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
options copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
||||||
EOF
|
EOF
|
||||||
cat > ${TEMPDIR}/loader/entries/${UXNAME}.conf << EOF
|
cat > ${TEMPDIR}/loader/entries/${UXNAME}.conf << EOF
|
||||||
title ${PNAME} (Run from media)
|
title ${PNAME} (Media)
|
||||||
linux /boot/${UXNAME}.kern
|
linux /boot/${UXNAME}.kern
|
||||||
initrd /boot/${UXNAME}.img
|
initrd /boot/${UXNAME}.img
|
||||||
options archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
options archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
||||||
@@ -73,16 +73,16 @@ EOF
|
|||||||
# GETTING DEJA VU HERE.
|
# GETTING DEJA VU HERE.
|
||||||
cat > ${SRCDIR}/efiboot/loader/loader.conf << EOF
|
cat > ${SRCDIR}/efiboot/loader/loader.conf << EOF
|
||||||
timeout 3
|
timeout 3
|
||||||
default ${UXNAME}_ram
|
default ${UXNAME}
|
||||||
EOF
|
EOF
|
||||||
cat > ${SRCDIR}/efiboot/loader/entries/${UXNAME}_ram.conf << EOF
|
cat > ${SRCDIR}/efiboot/loader/entries/${UXNAME}_ram.conf << EOF
|
||||||
title ${PNAME}
|
title ${PNAME} (RAM)
|
||||||
linux /EFI/${DISTNAME}/${UXNAME}.efi
|
linux /EFI/${DISTNAME}/${UXNAME}.efi
|
||||||
initrd /EFI/${DISTNAME}/${UXNAME}.img
|
initrd /EFI/${DISTNAME}/${UXNAME}.img
|
||||||
options copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
options copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
||||||
EOF
|
EOF
|
||||||
cat > ${SRCDIR}/efiboot/loader/entries/${UXNAME}.conf << EOF
|
cat > ${SRCDIR}/efiboot/loader/entries/${UXNAME}.conf << EOF
|
||||||
title ${PNAME} (Run from media)
|
title ${PNAME} (Media)
|
||||||
linux /EFI/${DISTNAME}/${UXNAME}.efi
|
linux /EFI/${DISTNAME}/${UXNAME}.efi
|
||||||
initrd /EFI/${DISTNAME}/${UXNAME}.img
|
initrd /EFI/${DISTNAME}/${UXNAME}.img
|
||||||
options archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
options archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ MENU BACKGROUND /${UXNAME}.png
|
|||||||
LABEL check
|
LABEL check
|
||||||
MENU LABEL Your best supported kernel should be detected automatically.
|
MENU LABEL Your best supported kernel should be detected automatically.
|
||||||
COM32 ifcpu64.c32
|
COM32 ifcpu64.c32
|
||||||
APPEND ${UXNAME}_ram_64 -- ${UXNAME}_ram_32
|
APPEND ${UXNAME}_64 -- ${UXNAME}_32
|
||||||
MENU DEFAULT
|
MENU DEFAULT
|
||||||
|
|
||||||
|
|
||||||
@@ -84,10 +84,10 @@ MENU SEPARATOR
|
|||||||
## 64 BIT
|
## 64 BIT
|
||||||
MENU BEGIN 64BIT
|
MENU BEGIN 64BIT
|
||||||
MENU LABEL ^1) 64-Bit ...
|
MENU LABEL ^1) 64-Bit ...
|
||||||
ONTIMEOUT ${UXNAME}_ram_64
|
ONTIMEOUT ${UXNAME}_64
|
||||||
|
|
||||||
LABEL ${UXNAME}_ram_64
|
LABEL ${UXNAME}_ram_64
|
||||||
MENU LABEL ^1) ${PNAME} (run from RAM) (Default)
|
MENU LABEL ^1) ${PNAME} (run from RAM)
|
||||||
LINUX /boot/${UXNAME}.64.kern
|
LINUX /boot/${UXNAME}.64.kern
|
||||||
INITRD /boot/${UXNAME}.64.img
|
INITRD /boot/${UXNAME}.64.img
|
||||||
APPEND copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
APPEND copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
||||||
@@ -97,7 +97,7 @@ LABEL ${UXNAME}_ram_64
|
|||||||
MENU DEFAULT
|
MENU DEFAULT
|
||||||
|
|
||||||
LABEL ${UXNAME}_64
|
LABEL ${UXNAME}_64
|
||||||
MENU LABEL ^1) ${PNAME}
|
MENU LABEL ^1) ${PNAME} (Default)
|
||||||
LINUX /boot/${UXNAME}.64.kern
|
LINUX /boot/${UXNAME}.64.kern
|
||||||
INITRD /boot/${UXNAME}.64.img
|
INITRD /boot/${UXNAME}.64.img
|
||||||
APPEND archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
APPEND archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
||||||
@@ -110,11 +110,11 @@ MENU END
|
|||||||
|
|
||||||
MENU BEGIN 32BIT
|
MENU BEGIN 32BIT
|
||||||
MENU LABEL ^2) 32-Bit ...
|
MENU LABEL ^2) 32-Bit ...
|
||||||
ONTIMEOUT ${UXNAME}_ram_32
|
ONTIMEOUT ${UXNAME}_32
|
||||||
|
|
||||||
## 32 BIT
|
## 32 BIT
|
||||||
LABEL ${UXNAME}_ram_32
|
LABEL ${UXNAME}_ram_32
|
||||||
MENU LABEL ^1) ${PNAME} (run from RAM) (Default)
|
MENU LABEL ^1) ${PNAME} (run from RAM)
|
||||||
LINUX /boot/${UXNAME}.32.kern
|
LINUX /boot/${UXNAME}.32.kern
|
||||||
INITRD /boot/${UXNAME}.32.img
|
INITRD /boot/${UXNAME}.32.img
|
||||||
APPEND copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
APPEND copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
||||||
@@ -124,7 +124,7 @@ LABEL ${UXNAME}_ram_32
|
|||||||
MENU DEFAULT
|
MENU DEFAULT
|
||||||
|
|
||||||
LABEL ${UXNAME}_32
|
LABEL ${UXNAME}_32
|
||||||
MENU LABEL ^2) ${PNAME}
|
MENU LABEL ^2) ${PNAME} (Default)
|
||||||
LINUX /boot/${UXNAME}.32.kern
|
LINUX /boot/${UXNAME}.32.kern
|
||||||
INITRD /boot/${UXNAME}.32.img
|
INITRD /boot/${UXNAME}.32.img
|
||||||
APPEND archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
APPEND archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
||||||
@@ -188,10 +188,10 @@ MENU SEPARATOR
|
|||||||
|
|
||||||
MENU BEGIN ${ARCH}BIT
|
MENU BEGIN ${ARCH}BIT
|
||||||
MENU LABEL ^1) ${ARCH}-Bit ...
|
MENU LABEL ^1) ${ARCH}-Bit ...
|
||||||
ONTIMEOUT ${UXNAME}_ram_${ARCH}
|
ONTIMEOUT ${UXNAME}_${ARCH}
|
||||||
|
|
||||||
LABEL ${UXNAME}_ram_${ARCH}
|
LABEL ${UXNAME}_ram_${ARCH}
|
||||||
MENU LABEL ^1) ${PNAME} (run from RAM) (Default)
|
MENU LABEL ^1) ${PNAME} (run from RAM)
|
||||||
LINUX /boot/${UXNAME}.${ARCH}.kern
|
LINUX /boot/${UXNAME}.${ARCH}.kern
|
||||||
INITRD /boot/${UXNAME}.${ARCH}.img
|
INITRD /boot/${UXNAME}.${ARCH}.img
|
||||||
APPEND copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
APPEND copytoram archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
||||||
@@ -201,7 +201,7 @@ LABEL ${UXNAME}_ram_${ARCH}
|
|||||||
MENU DEFAULT
|
MENU DEFAULT
|
||||||
|
|
||||||
LABEL ${UXNAME}_${ARCH}
|
LABEL ${UXNAME}_${ARCH}
|
||||||
MENU LABEL ^1) ${PNAME}
|
MENU LABEL ^1) ${PNAME} (Default)
|
||||||
LINUX /boot/${UXNAME}.${ARCH}.kern
|
LINUX /boot/${UXNAME}.${ARCH}.kern
|
||||||
INITRD /boot/${UXNAME}.${ARCH}.img
|
INITRD /boot/${UXNAME}.${ARCH}.img
|
||||||
APPEND archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
APPEND archisobasedir=${DISTNAME} archisolabel=${DISTNAME}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ do
|
|||||||
sed -i -re "s/^([[:space:]]*ESSID[[:space:]]*=).*/\1${ESSID}/g" /etc/netctl/${i}
|
sed -i -re "s/^([[:space:]]*ESSID[[:space:]]*=).*/\1${ESSID}/g" /etc/netctl/${i}
|
||||||
ifconfig ${i} down
|
ifconfig ${i} down
|
||||||
fi
|
fi
|
||||||
netctl start ${i} > /dev/null 2>&1
|
netctl restart ${i} > /dev/null 2>&1
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user