<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>regenerate 70-persistent-net.rules Archives - Linux Windows and android Tutorials</title>
	<atom:link href="https://www.osradar.com/tag/regenerate-70-persistent-net-rules/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.osradar.com</link>
	<description>tutorials and news and Seurity</description>
	<lastBuildDate>Fri, 15 May 2020 13:18:48 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.8.12</generator>
	<item>
		<title>Force creation of 70-persistent-net.rules on CentOS /Redhat 7/8</title>
		<link>https://www.osradar.com/force-creation-of-70-persistent-net-rules-on-centos-redhat-7-8/</link>
					<comments>https://www.osradar.com/force-creation-of-70-persistent-net-rules-on-centos-redhat-7-8/#respond</comments>
		
		<dc:creator><![CDATA[Mel]]></dc:creator>
		<pubDate>Fri, 15 May 2020 13:10:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[regenerate 70-persistent-net.rules]]></category>
		<guid isPermaLink="false">https://www.osradar.com/?p=20355</guid>

					<description><![CDATA[<p>Hello if you have these option enabled in your grup conf net.ifnames=0 and biosdevname=0 , maybe you need to gecreete the 70-persistent-net.rules file to keep static mac adress on your configurations My Linux Server is Centos8.1 but this way should work on RHEL 6/7 based Systems. As you can see i have no rule called [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.osradar.com/force-creation-of-70-persistent-net-rules-on-centos-redhat-7-8/">Force creation of 70-persistent-net.rules on CentOS /Redhat 7/8</a> appeared first on <a rel="nofollow" href="https://www.osradar.com">Linux  Windows and android  Tutorials</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p></p>



<p>Hello  if you have these option enabled  in your grup conf net.ifnames=0 and biosdevname=0 , maybe you need to gecreete  the 70-persistent-net.rules file  to  keep static mac adress on your configurations </p>



<p></p>



<p>My Linux Server is   Centos8.1  but this way should work on RHEL 6/7 based Systems.  </p>



<p>As you can see  i have no rule called  70-persistent-net.rules</p>



<p>[root@192 rules.d]# ls -altr /etc/udev/rules.d<br>total 4<br>-rw-r&#8211;r&#8211;. 1 root root 628 Jun 3 2019 70-persistent-ipoib.rules<br>drwxr-xr-x. 2 root root 39 Feb 24 11:05 .<br>drwxr-xr-x. 4 root root 68 Mar 26 10:42 ..<br>[root@192 rules.d]#</p>



<ul><li>Logon under root or sudo -s</li><li>Create &#8220;/lib/udev/write_net_rules&#8221; file with content:</li></ul>



<pre class="wp-block-preformatted">#!/bin/sh -e
#
# Copyright (C) 2006 Marco d'Itri &lt;md@Linux.IT&gt;
# Copyright (C) 2007 Kay Sievers &lt;kay.sievers@vrfy.org&gt;
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation version 2 of the License.
#
# This script is run to create persistent network device naming rules
# based on properties of the device.
# If the interface needs to be renamed, INTERFACE_NEW=&lt;name&gt; will be printed
# on stdout to allow udev to IMPORT it.

# variables used to communicate:
#   MATCHADDR             MAC address used for the match
#   MATCHID               bus_id used for the match
#   MATCHDEVID            dev_id used for the match
#   MATCHDRV              driver name used for the match
#   MATCHIFTYPE           interface type match
#   COMMENT               comment to add to the generated rule
#   INTERFACE_NAME        requested name supplied by external tool
#   INTERFACE_NEW         new interface name returned by rule writer

# debug, if UDEV_LOG=&lt;debug&gt;
if [ -n "$UDEV_LOG" ]; then
	if [ "$UDEV_LOG" -ge 7 ]; then
		set -x
	fi
fi

if [ -n "$ASSIGNED_INTERFACE_NAME" -a "$ASSIGNED_INTERFACE_NAME" = "$INTERFACE_NAME" ]; then
	exit 0
fi

RULES_FILE='/etc/udev/rules.d/70-persistent-net.rules'

. /lib/udev/rule_generator.functions

find_all_ifcfg() {
    local links=$1
    local __sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave\)$/d'

    files=$(echo /etc/sysconfig/network-scripts/ifcfg-* \
	| LC_ALL=C sed -e "$__sed_discard_ignored_files")
    for i in $files; do
	(
	    . $i
	    [ -n "$HWADDR" ] &amp;&amp; [ "${links%%[ \[\]0-9]*}" = "${DEVICE%%[ \[\]0-9]*}" ] &amp;&amp; echo $DEVICE
	)
    done
}

interface_name_taken() {
	local value="$(find_all_rules 'NAME=' $INTERFACE)"
	if [ "$value" ]; then
		return 0
	else
	        for i in $(find_all_ifcfg "$INTERFACE"); do
		        [ "$INTERFACE" = "$i" ] &amp;&amp; return 0
		done
		return 1
	fi
}

find_next_available() {
	raw_find_next_available $(find_all_rules 'NAME=' "$1") $(find_all_ifcfg "$1")
}

write_rule() {
	local match="$1"
	local name="$2"
	local comment="$3"

	{
	if [ "$PRINT_HEADER" ]; then
		PRINT_HEADER=
		echo "# This file was automatically generated by the $0"
		echo "# program, run by the persistent-net-generator.rules rules file."
		echo "#"
		echo "# You can modify it, as long as you keep each rule on a single"
		echo "# line, and change only the value of the NAME= key."
	fi

	echo ""
	[ "$comment" ] &amp;&amp; echo "# $comment"
	echo "SUBSYSTEM==\"net\", ACTION==\"add\"$match, NAME=\"$name\""
	} &gt;&gt; $RULES_FILE
}

if [ -z "$INTERFACE" ]; then
	echo "missing \$INTERFACE" &gt;&amp;2
	exit 1
fi

# Prevent concurrent processes from modifying the file at the same time.
lock_rules_file

# Check if the rules file is writeable.
choose_rules_file

# the DRIVERS key is needed to not match bridges and VLAN sub-interfaces
if [ "$MATCHADDR" ]; then
	match="$match, DRIVERS==\"?*\", ATTR{address}==\"$MATCHADDR\""
else
	if [ "$INTERFACE_NAME" ]; then
		match="$match, DRIVERS==\"?*\", ENV{INTERFACE_NAME}==\"$INTERFACE_NAME\""
	fi
fi

if [ "$MATCHDRV" ]; then
	match="$match, DRIVERS==\"$MATCHDRV\""
fi

if [ "$MATCHDEVID" ]; then
	match="$match, ATTR{dev_id}==\"$MATCHDEVID\""
fi

if [ "$MATCHID" ]; then
	match="$match, KERNELS==\"$MATCHID\""
fi

if [ "$MATCHIFTYPE" ]; then
	match="$match, ATTR{type}==\"$MATCHIFTYPE\""
fi

if [ -z "$match" ]; then
	echo "missing valid match" &gt;&amp;2
	unlock_rules_file
	exit 1
fi

basename=${INTERFACE%%[0-9]*}
match="$match, KERNEL==\"$basename*\""

if [ "$INTERFACE_NAME" ]; then
	# external tools may request a custom name
	COMMENT="$COMMENT (custom name provided by external tool)"
	if [ "$INTERFACE_NAME" != "$INTERFACE" ]; then
		INTERFACE=$INTERFACE_NAME;
		echo "INTERFACE_NEW=$INTERFACE"
	fi
else
	# if a rule using the current name already exists, find a new name
	if interface_name_taken; then
		INTERFACE="$basename$(find_next_available "$basename[0-9]*")"
		# prevent INTERFACE from being "eth" instead of "eth0"
		[ "$INTERFACE" = "${INTERFACE%%[ \[\]0-9]*}" ] &amp;&amp; INTERFACE=${INTERFACE}0
		echo "INTERFACE_NEW=$INTERFACE"
	fi
fi

# build a regular expression that matches the new rule that we want to write
new_rule_pattern=$(echo "^SUBSYSTEM==\"net\", ACTION==\"add\"$match, NAME=\"$INTERFACE\"$" | sed -re 's/([\?\*\{\}])/\\\1/g')

# Double check if the new rule has already been written. This happens if
# multiple add events are generated before the script returns and udevd
# renames the interfaces. See #765577 for details.
if egrep -qs "$new_rule_pattern" $RO_RULES_FILE $RULES_FILE; then
	unlock_rules_file
	exit 0
fi

write_rule "$match" "$INTERFACE" "$COMMENT"

unlock_rules_file

exit 0</pre>



<ul><li>Make it executable:</li></ul>



<pre class="wp-block-preformatted">chmod +x /lib/udev/write_net_rules</pre>



<ul><li>Create file &#8220;/lib/udev/rule_generator.functions&#8221; with content:</li></ul>



<pre class="wp-block-preformatted"># functions used by the udev rule generator
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation version 2 of the License.

PATH='/sbin:/bin'

# Read a single line from file $1 in the $DEVPATH directory.
# The function must not return an error even if the file does not exist.
sysread() {
	local file="$1"
	[ -e "/sys$DEVPATH/$file" ] || return 0
	local value
	read value &lt; "/sys$DEVPATH/$file" || return 0
	echo "$value"
}

sysreadlink() {
	local file="$1"
	[ -e "/sys$DEVPATH/$file" ] || return 0
	readlink -f /sys$DEVPATH/$file 2&gt; /dev/null || true
}

# Return true if a directory is writeable.
writeable() {
	if ln -s test-link $1/.is-writeable 2&gt; /dev/null; then
		rm -f $1/.is-writeable
		return 0
	else
		return 1
	fi
}

# Create a lock file for the current rules file.
lock_rules_file() {
	[ -e /dev/.udev/ ] || return 0

	RULES_LOCK="/dev/.udev/.lock-${RULES_FILE##*/}"

	retry=30
	while ! mkdir $RULES_LOCK 2&gt; /dev/null; do
		if [ $retry -eq 0 ]; then
			 echo "Cannot lock $RULES_FILE!" &gt;&amp;2
			 exit 2
		fi
		sleep 1
		retry=$(($retry - 1))
	done
}

unlock_rules_file() {
	[ "$RULES_LOCK" ] || return 0
	rmdir $RULES_LOCK || true
}

# Choose the real rules file if it is writeable or a temporary file if not.
# Both files should be checked later when looking for existing rules.
choose_rules_file() {
	local tmp_rules_file="/dev/.udev/tmp-rules--${RULES_FILE##*/}"
	[ -e "$RULES_FILE" -o -e "$tmp_rules_file" ] || PRINT_HEADER=1

	if writeable ${RULES_FILE%/*}; then
		RO_RULES_FILE='/dev/null'
	else
		RO_RULES_FILE=$RULES_FILE
		RULES_FILE=$tmp_rules_file
	fi
}

# Return the name of the first free device.
raw_find_next_available() {
	local links="$*"

	local basename=${links%%[ 0-9]*}
	local max=-1
	for name in $links; do
		local num=${name#$basename}
		[ "$num" ] || num=0
		[ $num -gt $max ] &amp;&amp; max=$num
	done

	local max=$(($max + 1))
	# "name0" actually is just "name"
	[ $max -eq 0 ] &amp;&amp; return
	echo "$max"
}

# Find all rules matching a key (with action) and a pattern.
find_all_rules() {
	local key="$1"
	local linkre="$2"
	local match="$3"

	local search='.*[[:space:],]'"$key"'"('"$linkre"')".*'
	echo $(sed -n -r -e 's/^#.*//' -e "${match}s/${search}/\1/p" \
		$RO_RULES_FILE \
		$([ -e $RULES_FILE ] &amp;&amp; echo $RULES_FILE) \
		2&gt;/dev/null)
}</pre>



<ul><li>Create file &#8220;/lib/udev/rules.d/75-persistent-net-generator.rules&#8221; with content:</li></ul>



<pre class="wp-block-preformatted"># do not edit this file, it will be overwritten on update

# these rules generate rules for persistent network device naming
#
# variables used to communicate:
#   MATCHADDR             MAC address used for the match
#   MATCHID               bus_id used for the match
#   MATCHDRV              driver name used for the match
#   MATCHIFTYPE           interface type match
#   COMMENT               comment to add to the generated rule
#   INTERFACE_NAME        requested name supplied by external tool
#   INTERFACE_NEW         new interface name returned by rule writer

ACTION!="add", GOTO="persistent_net_generator_end"
SUBSYSTEM!="net", GOTO="persistent_net_generator_end"

# ignore the interface if a name has already been set
NAME=="?*", ENV{INTERFACE_NAME}=="", GOTO="persistent_net_generator_end"
NAME=="?*", ENV{INTERFACE_NAME}=="?*", ENV{ASSIGNED_INTERFACE_NAME}="$name"

# device name whitelist
KERNEL!="eth*|ath*|wlan*[0-9]|msh*|ra*|sta*|ctc*|lcs*|hsi*", GOTO="persistent_net_generator_end"

# ignore Xen virtual interfaces
SUBSYSTEMS=="xen", GOTO="persistent_net_generator_end"

# read MAC address
ENV{MATCHADDR}="$attr{address}"

# match interface type
ENV{MATCHIFTYPE}="$attr{type}"

# do not use empty address
ENV{MATCHADDR}=="00:00:00:00:00:00", ENV{MATCHADDR}=""

# do not use "locally administered" MAC address
ATTR{addr_assign_type}=="?*", ATTR{addr_assign_type}!="0", ENV{MATCHADDR}="", ENV{MATCHID}="$env{NET_MATCHID}"
ATTR{addr_assign_type}=="0", GOTO="globally_administered_whitelist"

# These vendors are known to violate the local MAC address assignment scheme
# Interlan, DEC (UNIBUS or QBUS), Apollo, Cisco, Racal-Datacom
ENV{MATCHADDR}=="02:07:01:*", GOTO="globally_administered_whitelist"
# 3Com
ENV{MATCHADDR}=="02:60:60:*", GOTO="globally_administered_whitelist"
# 3Com IBM PC; Imagen; Valid; Cisco; Apple
ENV{MATCHADDR}=="02:60:8c:*", GOTO="globally_administered_whitelist"
# Intel
ENV{MATCHADDR}=="02:a0:c9:*", GOTO="globally_administered_whitelist"
# Olivetti
ENV{MATCHADDR}=="02:aa:3c:*", GOTO="globally_administered_whitelist"
# CMC Masscomp; Silicon Graphics; Prime EXL
ENV{MATCHADDR}=="02:cf:1f:*", GOTO="globally_administered_whitelist"
# Prominet Corporation Gigabit Ethernet Switch
ENV{MATCHADDR}=="02:e0:3b:*", GOTO="globally_administered_whitelist"
# BTI (Bus-Tech, Inc.) IBM Mainframes
ENV{MATCHADDR}=="02:e6:d3:*", GOTO="globally_administered_whitelist"
# Realtek
ENV{MATCHADDR}=="52:54:00:*", GOTO="globally_administered_whitelist"
# Novell 2000
ENV{MATCHADDR}=="52:54:4c:*", GOTO="globally_administered_whitelist"
# Realtec
ENV{MATCHADDR}=="52:54:ab:*", GOTO="globally_administered_whitelist"
# Kingston Technologies
ENV{MATCHADDR}=="e2:0c:0f:*", GOTO="globally_administered_whitelist"

# match interface dev_id
ATTR{dev_id}=="?*", ENV{MATCHDEVID}="$attr{dev_id}"

# do not use "locally administered" MAC address
ENV{MATCHADDR}=="?[2367abef]:*", ENV{MATCHADDR}=""

LABEL="globally_administered_whitelist"

# build comment line for generated rule:
SUBSYSTEMS=="pci", ENV{COMMENT}="PCI device $attr{vendor}:$attr{device} ($driver)"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="?*", ENV{COMMENT}="USB device 0x$attr{idVendor}:0x$attr{idProduct} ($driver)"
SUBSYSTEMS=="pcmcia", ENV{COMMENT}="PCMCIA device $attr{card_id}:$attr{manf_id} ($driver)"
SUBSYSTEMS=="ieee1394", ENV{COMMENT}="Firewire device $attr{host_id})"

# ibmveth likes to use "locally administered" MAC addresses
DRIVERS=="ibmveth", ENV{MATCHADDR}="$attr{address}", ENV{COMMENT}="ibmveth ($id)", ENV{MATCHID}=""

# S/390 uses id matches only, do not use MAC address match
SUBSYSTEMS=="ccwgroup", ENV{COMMENT}="S/390 $driver device at $id", ENV{MATCHID}="$id", ENV{MATCHDRV}="$driver", ENV{MATCHADDR}="", ENV{MATCHDEVID}=""

# see if we got enough data to create a rule
ENV{MATCHADDR}=="", ENV{MATCHID}=="", ENV{INTERFACE_NAME}=="", GOTO="persistent_net_generator_end"

# default comment
ENV{COMMENT}=="", ENV{COMMENT}="net device ($attr{driver})"

# write rule
DRIVERS=="?*", IMPORT{program}="write_net_rules"

# rename interface if needed
ENV{INTERFACE_NEW}=="?*", NAME="$env{INTERFACE_NEW}"

LABEL="persistent_net_generator_end"</pre>



<ul><li><strong>Try it out: without reboot </strong></li></ul>



<pre class="wp-block-preformatted">/sbin/udevadm trigger --type=devices --action=add
cat /etc/udev/rules.d/70-persistent-net.rules</pre>



<p>[root@192 rules.d]# cat 70-persistent-net.rules</p>



<pre class="wp-block-code">&#91;root@192 rules.d]# cat 70-persistent-net.rules
# This file was automatically generated by the /usr/lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:c3:b2:fc", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
&#91;root@192 rules.d]#
</pre>



<figure class="wp-block-image size-large"><img loading="lazy" width="966" height="309" src="//1723336065.rsc.cdn77.org/wp-content/uploads/2020/05/image-27.png" alt="" class="wp-image-20357" srcset="https://www.osradar.com/wp-content/uploads/2020/05/image-27.png 966w, https://www.osradar.com/wp-content/uploads/2020/05/image-27-300x96.png 300w, https://www.osradar.com/wp-content/uploads/2020/05/image-27-768x246.png 768w, https://www.osradar.com/wp-content/uploads/2020/05/image-27-696x223.png 696w" sizes="(max-width: 966px) 100vw, 966px" /></figure>



<p>Cheers  !! . Big thank to Sergei Shuykov</p>
<p>The post <a rel="nofollow" href="https://www.osradar.com/force-creation-of-70-persistent-net-rules-on-centos-redhat-7-8/">Force creation of 70-persistent-net.rules on CentOS /Redhat 7/8</a> appeared first on <a rel="nofollow" href="https://www.osradar.com">Linux  Windows and android  Tutorials</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.osradar.com/force-creation-of-70-persistent-net-rules-on-centos-redhat-7-8/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
